| author | wenzelm | 
| Mon, 23 Jan 2023 20:23:48 +0100 | |
| changeset 77057 | e233054dcb00 | 
| parent 70817 | dd675800469d | 
| child 77275 | 386b1b33785c | 
| permissions | -rw-r--r-- | 
| 69791 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1 | (* | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2 | Title: HOL/Computational_Algebra/Formal_Laurent_Series.thy | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3 | Author: Jeremy Sylvestre, University of Alberta (Augustana Campus) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4 | *) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 5 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 6 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 7 | section \<open>A formalization of formal Laurent series\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 8 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 9 | theory Formal_Laurent_Series | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 10 | imports | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 11 | Polynomial_FPS | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 12 | begin | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 13 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 14 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 15 | subsection \<open>The type of formal Laurent series\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 16 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 17 | subsubsection \<open>Type definition\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 18 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 19 | typedef (overloaded) 'a fls = "{f::int \<Rightarrow> 'a::zero. \<forall>\<^sub>\<infinity> n::nat. f (- int n) = 0}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 20 | morphisms fls_nth Abs_fls | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 21 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 22 |   show "(\<lambda>x. 0) \<in> {f::int \<Rightarrow> 'a::zero. \<forall>\<^sub>\<infinity> n::nat. f (- int n) = 0}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 23 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 24 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 25 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 26 | setup_lifting type_definition_fls | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 27 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 28 | unbundle fps_notation | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 29 | notation fls_nth (infixl "$$" 75) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 30 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 31 | lemmas fls_eqI = iffD1[OF fls_nth_inject, OF iffD2, OF fun_eq_iff, OF allI] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 32 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 33 | lemma expand_fls_eq: "f = g \<longleftrightarrow> (\<forall>n. f $$ n = g $$ n)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 34 | by (simp add: fls_nth_inject[symmetric] fun_eq_iff) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 35 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 36 | lemma nth_Abs_fls [simp]: "\<forall>\<^sub>\<infinity>n. f (- int n) = 0 \<Longrightarrow> Abs_fls f $$ n = f n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 37 | by (simp add: Abs_fls_inverse[OF CollectI]) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 38 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 39 | lemmas nth_Abs_fls_finite_nonzero_neg_nth = nth_Abs_fls[OF iffD2, OF eventually_cofinite] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 40 | lemmas nth_Abs_fls_ex_nat_lower_bound = nth_Abs_fls[OF iffD2, OF MOST_nat] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 41 | lemmas nth_Abs_fls_nat_lower_bound = nth_Abs_fls_ex_nat_lower_bound[OF exI] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 42 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 43 | lemma nth_Abs_fls_ex_lower_bound: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 44 | assumes "\<exists>N. \<forall>n<N. f n = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 45 | shows "Abs_fls f $$ n = f n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 46 | proof (intro nth_Abs_fls_ex_nat_lower_bound) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 47 | from assms obtain N::int where "\<forall>n<N. f n = 0" by fast | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 48 | hence "\<forall>n > (if N < 0 then nat (-N) else 0). f (-int n) = 0" by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 49 | thus "\<exists>M. \<forall>n>M. f (- int n) = 0" by fast | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 50 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 51 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 52 | lemmas nth_Abs_fls_lower_bound = nth_Abs_fls_ex_lower_bound[OF exI] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 53 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 54 | lemmas MOST_fls_neg_nth_eq_0 [simp] = CollectD[OF fls_nth] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 55 | lemmas fls_finite_nonzero_neg_nth = iffD1[OF eventually_cofinite MOST_fls_neg_nth_eq_0] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 56 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 57 | lemma fls_nth_vanishes_below_natE: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 58 | fixes f :: "'a::zero fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 59 | obtains N :: nat | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 60 | where "\<forall>n>N. f$$(-int n) = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 61 | using iffD1[OF MOST_nat MOST_fls_neg_nth_eq_0] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 62 | by blast | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 63 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 64 | lemma fls_nth_vanishes_belowE: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 65 | fixes f :: "'a::zero fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 66 | obtains N :: int | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 67 | where "\<forall>n<N. f$$n = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 68 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 69 | obtain K :: nat where K: "\<forall>n>K. f$$(-int n) = 0" by (elim fls_nth_vanishes_below_natE) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 70 | have "\<forall>n < -int K. f$$n = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 71 | proof clarify | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 72 | fix n assume n: "n < -int K" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 73 | define m where "m \<equiv> nat (-n)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 74 | with n have "m > K" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 75 | moreover from n m_def have "f$$n = f $$ (-int m)" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 76 | ultimately show "f $$ n = 0" using K by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 77 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 78 | thus "(\<And>N. \<forall>n<N. f $$ n = 0 \<Longrightarrow> thesis) \<Longrightarrow> thesis" by fast | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 79 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 80 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 81 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 82 | subsubsection \<open>Definition of basic zero, one, constant, X, and inverse X elements\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 83 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 84 | instantiation fls :: (zero) zero | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 85 | begin | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 86 | lift_definition zero_fls :: "'a fls" is "\<lambda>_. 0" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 87 | instance .. | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 88 | end | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 89 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 90 | lemma fls_zero_nth [simp]: "0 $$ n = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 91 | by (simp add: zero_fls_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 92 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 93 | lemma fls_zero_eqI: "(\<And>n. f$$n = 0) \<Longrightarrow> f = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 94 | by (fastforce intro: fls_eqI) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 95 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 96 | lemma fls_nonzeroI: "f$$n \<noteq> 0 \<Longrightarrow> f \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 97 | by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 98 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 99 | lemma fls_nonzero_nth: "f \<noteq> 0 \<longleftrightarrow> (\<exists> n. f $$ n \<noteq> 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 100 | using fls_zero_eqI by fastforce | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 101 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 102 | lemma fls_trivial_delta_eq_zero [simp]: "b = 0 \<Longrightarrow> Abs_fls (\<lambda>n. if n=a then b else 0) = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 103 | by (intro fls_zero_eqI) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 104 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 105 | lemma fls_delta_nth [simp]: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 106 | "Abs_fls (\<lambda>n. if n=a then b else 0) $$ n = (if n=a then b else 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 107 | using nth_Abs_fls_lower_bound[of a "\<lambda>n. if n=a then b else 0"] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 108 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 109 | instantiation fls :: ("{zero,one}") one
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 110 | begin | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 111 | lift_definition one_fls :: "'a fls" is "\<lambda>k. if k = 0 then 1 else 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 112 | by (simp add: eventually_cofinite) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 113 | instance .. | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 114 | end | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 115 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 116 | lemma fls_one_nth [simp]: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 117 | "1 $$ n = (if n = 0 then 1 else 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 118 | by (simp add: one_fls_def eventually_cofinite) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 119 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 120 | instance fls :: (zero_neq_one) zero_neq_one | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 121 | proof (standard, standard) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 122 | assume "(0::'a fls) = (1::'a fls)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 123 | hence "(0::'a fls) $$ 0 = (1::'a fls) $$ 0" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 124 | thus False by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 125 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 126 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 127 | definition fls_const :: "'a::zero \<Rightarrow> 'a fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 128 | where "fls_const c \<equiv> Abs_fls (\<lambda>n. if n = 0 then c else 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 129 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 130 | lemma fls_const_nth [simp]: "fls_const c $$ n = (if n = 0 then c else 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 131 | by (simp add: fls_const_def eventually_cofinite) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 132 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 133 | lemma fls_const_0 [simp]: "fls_const 0 = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 134 | unfolding fls_const_def using fls_trivial_delta_eq_zero by fast | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 135 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 136 | lemma fls_const_nonzero: "c \<noteq> 0 \<Longrightarrow> fls_const c \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 137 | using fls_nonzeroI[of "fls_const c" 0] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 138 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 139 | lemma fls_const_1 [simp]: "fls_const 1 = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 140 | unfolding fls_const_def one_fls_def .. | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 141 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 142 | lift_definition fls_X :: "'a::{zero,one} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 143 | is "\<lambda>n. if n = 1 then 1 else 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 144 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 145 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 146 | lemma fls_X_nth [simp]: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 147 | "fls_X $$ n = (if n = 1 then 1 else 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 148 | by (simp add: fls_X_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 149 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 150 | lemma fls_X_nonzero [simp]: "(fls_X :: 'a :: zero_neq_one fls) \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 151 | by (intro fls_nonzeroI) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 152 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 153 | lift_definition fls_X_inv :: "'a::{zero,one} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 154 | is "\<lambda>n. if n = -1 then 1 else 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 155 | by (simp add: eventually_cofinite) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 156 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 157 | lemma fls_X_inv_nth [simp]: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 158 | "fls_X_inv $$ n = (if n = -1 then 1 else 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 159 | by (simp add: fls_X_inv_def eventually_cofinite) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 160 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 161 | lemma fls_X_inv_nonzero [simp]: "(fls_X_inv :: 'a :: zero_neq_one fls) \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 162 | by (intro fls_nonzeroI) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 163 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 164 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 165 | subsection \<open>Subdegrees\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 166 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 167 | lemma unique_fls_subdegree: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 168 | assumes "f \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 169 | shows "\<exists>!n. f$$n \<noteq> 0 \<and> (\<forall>m. f$$m \<noteq> 0 \<longrightarrow> n \<le> m)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 170 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 171 | obtain N::nat where N: "\<forall>n>N. f$$(-int n) = 0" by (elim fls_nth_vanishes_below_natE) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 172 | define M where "M \<equiv> -int N" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 173 | have M: "\<And>m. f$$m \<noteq> 0 \<Longrightarrow> M \<le> m" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 174 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 175 | fix m assume m: "f$$m \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 176 | show "M \<le> m" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 177 | proof (cases "m<0") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 178 | case True with m N M_def show ?thesis | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 179 | using allE[OF N, of "nat (-m)" False] by force | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 180 | qed (simp add: M_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 181 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 182 | have "\<not> (\<forall>k::nat. f$$(M + int k) = 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 183 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 184 | assume above0: "\<forall>k::nat. f$$(M + int k) = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 185 | have "f=0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 186 | proof (rule fls_zero_eqI) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 187 | fix n show "f$$n = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 188 | proof (cases "M \<le> n") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 189 | case True | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 190 | define k where "k = nat (n - M)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 191 | from True have "n = M + int k" by (simp add: k_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 192 | with above0 show ?thesis by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 193 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 194 | case False with M show ?thesis by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 195 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 196 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 197 | with assms show False by fast | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 198 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 199 | hence ex_k: "\<exists>k::nat. f$$(M + int k) \<noteq> 0" by fast | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 200 | define k where "k \<equiv> (LEAST k::nat. f$$(M + int k) \<noteq> 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 201 | define n where "n \<equiv> M + int k" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 202 | from k_def n_def have fn: "f$$n \<noteq> 0" using LeastI_ex[OF ex_k] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 203 | moreover have "\<forall>m. f$$m \<noteq> 0 \<longrightarrow> n \<le> m" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 204 | proof (clarify) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 205 | fix m assume m: "f$$m \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 206 | with M have "M \<le> m" by fast | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 207 | define l where "l = nat (m - M)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 208 | from \<open>M \<le> m\<close> have l: "m = M + int l" by (simp add: l_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 209 | with n_def m k_def l show "n \<le> m" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 210 | using Least_le[of "\<lambda>k. f$$(M + int k) \<noteq> 0" l] by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 211 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 212 | moreover have "\<And>n'. f$$n' \<noteq> 0 \<Longrightarrow> (\<forall>m. f$$m \<noteq> 0 \<longrightarrow> n' \<le> m) \<Longrightarrow> n' = n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 213 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 214 | fix n' :: int | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 215 | assume n': "f$$n' \<noteq> 0" "\<forall>m. f$$m \<noteq> 0 \<longrightarrow> n' \<le> m" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 216 | from n'(1) M have "M \<le> n'" by fast | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 217 | define l where "l = nat (n' - M)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 218 | from \<open>M \<le> n'\<close> have l: "n' = M + int l" by (simp add: l_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 219 | with n_def k_def n' fn show "n' = n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 220 | using Least_le[of "\<lambda>k. f$$(M + int k) \<noteq> 0" l] by force | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 221 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 222 | ultimately show ?thesis | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 223 | using ex1I[of "\<lambda>n. f$$n \<noteq> 0 \<and> (\<forall>m. f$$m \<noteq> 0 \<longrightarrow> n \<le> m)" n] by blast | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 224 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 225 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 226 | definition fls_subdegree :: "('a::zero) fls \<Rightarrow> int"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 227 | where "fls_subdegree f \<equiv> (if f = 0 then 0 else LEAST n::int. f$$n \<noteq> 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 228 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 229 | lemma fls_zero_subdegree [simp]: "fls_subdegree 0 = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 230 | by (simp add: fls_subdegree_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 231 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 232 | lemma nth_fls_subdegree_nonzero [simp]: "f \<noteq> 0 \<Longrightarrow> f $$ fls_subdegree f \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 233 | using Least1I[OF unique_fls_subdegree] by (simp add: fls_subdegree_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 234 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 235 | lemma nth_fls_subdegree_zero_iff: "(f $$ fls_subdegree f = 0) \<longleftrightarrow> (f = 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 236 | using nth_fls_subdegree_nonzero by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 237 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 238 | lemma fls_subdegree_leI: "f $$ n \<noteq> 0 \<Longrightarrow> fls_subdegree f \<le> n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 239 | using Least1_le[OF unique_fls_subdegree] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 240 | by (auto simp: fls_subdegree_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 241 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 242 | lemma fls_subdegree_leI': "f $$ n \<noteq> 0 \<Longrightarrow> n \<le> m \<Longrightarrow> fls_subdegree f \<le> m" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 243 | using fls_subdegree_leI by fastforce | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 244 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 245 | lemma fls_eq0_below_subdegree [simp]: "n < fls_subdegree f \<Longrightarrow> f $$ n = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 246 | using fls_subdegree_leI by fastforce | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 247 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 248 | lemma fls_subdegree_geI: "f \<noteq> 0 \<Longrightarrow> (\<And>k. k < n \<Longrightarrow> f $$ k = 0) \<Longrightarrow> n \<le> fls_subdegree f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 249 | using nth_fls_subdegree_nonzero by force | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 250 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 251 | lemma fls_subdegree_ge0I: "(\<And>k. k < 0 \<Longrightarrow> f $$ k = 0) \<Longrightarrow> 0 \<le> fls_subdegree f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 252 | using fls_subdegree_geI[of f 0] by (cases "f=0") auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 253 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 254 | lemma fls_subdegree_greaterI: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 255 | assumes "f \<noteq> 0" "\<And>k. k \<le> n \<Longrightarrow> f $$ k = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 256 | shows "n < fls_subdegree f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 257 | using assms(1) assms(2)[of "fls_subdegree f"] nth_fls_subdegree_nonzero[of f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 258 | by force | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 259 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 260 | lemma fls_subdegree_eqI: "f $$ n \<noteq> 0 \<Longrightarrow> (\<And>k. k < n \<Longrightarrow> f $$ k = 0) \<Longrightarrow> fls_subdegree f = n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 261 | using fls_subdegree_leI fls_subdegree_geI[of f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 262 | by fastforce | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 263 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 264 | lemma fls_delta_subdegree [simp]: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 265 | "b \<noteq> 0 \<Longrightarrow> fls_subdegree (Abs_fls (\<lambda>n. if n=a then b else 0)) = a" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 266 | by (intro fls_subdegree_eqI) simp_all | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 267 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 268 | lemma fls_delta0_subdegree: "fls_subdegree (Abs_fls (\<lambda>n. if n=0 then a else 0)) = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 269 | by (cases "a=0") simp_all | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 270 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 271 | lemma fls_one_subdegree [simp]: "fls_subdegree 1 = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 272 | by (auto intro: fls_delta0_subdegree simp: one_fls_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 273 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 274 | lemma fls_const_subdegree [simp]: "fls_subdegree (fls_const c) = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 275 | by (cases "c=0") (auto intro: fls_subdegree_eqI) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 276 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 277 | lemma fls_X_subdegree [simp]: "fls_subdegree (fls_X::'a::{zero_neq_one} fls) = 1"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 278 | by (intro fls_subdegree_eqI) simp_all | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 279 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 280 | lemma fls_X_inv_subdegree [simp]: "fls_subdegree (fls_X_inv::'a::{zero_neq_one} fls) = -1"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 281 | by (intro fls_subdegree_eqI) simp_all | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 282 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 283 | lemma fls_eq_above_subdegreeI: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 284 | assumes "N \<le> fls_subdegree f" "N \<le> fls_subdegree g" "\<forall>k\<ge>N. f $$ k = g $$ k" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 285 | shows "f = g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 286 | proof (rule fls_eqI) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 287 | fix n from assms show "f $$ n = g $$ n" by (cases "n < N") auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 288 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 289 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 290 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 291 | subsection \<open>Shifting\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 292 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 293 | subsubsection \<open>Shift definition\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 294 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 295 | definition fls_shift :: "int \<Rightarrow> ('a::zero) fls \<Rightarrow> 'a fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 296 | where "fls_shift n f \<equiv> Abs_fls (\<lambda>k. f $$ (k+n))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 297 | \<comment> \<open>Since the index set is unbounded in both directions, we can shift in either direction.\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 298 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 299 | lemma fls_shift_nth [simp]: "fls_shift m f $$ n = f $$ (n+m)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 300 | unfolding fls_shift_def | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 301 | proof (rule nth_Abs_fls_ex_lower_bound) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 302 | obtain K::int where K: "\<forall>n<K. f$$n = 0" by (elim fls_nth_vanishes_belowE) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 303 | hence "\<forall>n<K-m. f$$(n+m) = 0" by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 304 | thus "\<exists>N. \<forall>n<N. f $$ (n + m) = 0" by fast | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 305 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 306 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 307 | lemma fls_shift_eq_iff: "(fls_shift m f = fls_shift m g) \<longleftrightarrow> (f = g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 308 | proof (rule iffI, rule fls_eqI) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 309 | fix k | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 310 | assume 1: "fls_shift m f = fls_shift m g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 311 | have "f $$ k = fls_shift m g $$ (k - m)" by (simp add: 1[symmetric]) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 312 | thus "f $$ k = g $$ k" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 313 | qed (intro fls_eqI, simp) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 314 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 315 | lemma fls_shift_0 [simp]: "fls_shift 0 f = f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 316 | by (intro fls_eqI) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 317 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 318 | lemma fls_shift_subdegree [simp]: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 319 | "f \<noteq> 0 \<Longrightarrow> fls_subdegree (fls_shift n f) = fls_subdegree f - n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 320 | by (intro fls_subdegree_eqI) simp_all | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 321 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 322 | lemma fls_shift_fls_shift [simp]: "fls_shift m (fls_shift k f) = fls_shift (k+m) f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 323 | by (intro fls_eqI) (simp add: algebra_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 324 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 325 | lemma fls_shift_fls_shift_reorder: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 326 | "fls_shift m (fls_shift k f) = fls_shift k (fls_shift m f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 327 | using fls_shift_fls_shift[of m k f] fls_shift_fls_shift[of k m f] by (simp add: add.commute) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 328 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 329 | lemma fls_shift_zero [simp]: "fls_shift m 0 = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 330 | by (intro fls_zero_eqI) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 331 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 332 | lemma fls_shift_eq0_iff: "fls_shift m f = 0 \<longleftrightarrow> f = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 333 | using fls_shift_eq_iff[of m f 0] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 334 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 335 | lemma fls_shift_nonneg_subdegree: "m \<le> fls_subdegree f \<Longrightarrow> fls_subdegree (fls_shift m f) \<ge> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 336 | by (cases "f=0") (auto intro: fls_subdegree_geI) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 337 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 338 | lemma fls_shift_delta: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 339 | "fls_shift m (Abs_fls (\<lambda>n. if n=a then b else 0)) = Abs_fls (\<lambda>n. if n=a-m then b else 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 340 | by (intro fls_eqI) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 341 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 342 | lemma fls_shift_const: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 343 | "fls_shift m (fls_const c) = Abs_fls (\<lambda>n. if n=-m then c else 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 344 | by (intro fls_eqI) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 345 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 346 | lemma fls_shift_const_nth: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 347 | "fls_shift m (fls_const c) $$ n = (if n=-m then c else 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 348 | by (simp add: fls_shift_const) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 349 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 350 | lemma fls_X_conv_shift_1: "fls_X = fls_shift (-1) 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 351 | by (intro fls_eqI) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 352 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 353 | lemma fls_X_shift_to_one [simp]: "fls_shift 1 fls_X = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 354 | using fls_shift_fls_shift[of "-1" 1 1] by (simp add: fls_X_conv_shift_1) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 355 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 356 | lemma fls_X_inv_conv_shift_1: "fls_X_inv = fls_shift 1 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 357 | by (intro fls_eqI) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 358 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 359 | lemma fls_X_inv_shift_to_one [simp]: "fls_shift (-1) fls_X_inv = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 360 | using fls_shift_fls_shift[of 1 "-1" 1] by (simp add: fls_X_inv_conv_shift_1) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 361 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 362 | lemma fls_X_fls_X_inv_conv: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 363 | "fls_X = fls_shift (-2) fls_X_inv" "fls_X_inv = fls_shift 2 fls_X" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 364 | by (simp_all add: fls_X_conv_shift_1 fls_X_inv_conv_shift_1) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 365 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 366 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 367 | subsubsection \<open>Base factor\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 368 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 369 | text \<open> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 370 |   Similarly to the @{const unit_factor} for formal power series, we can decompose a formal Laurent
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 371 | series as a power of the implied variable times a series of subdegree 0. | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 372 |   (See lemma @{text "fls_base_factor_X_power_decompose"}.)
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 373 |   But we will call this something other @{const unit_factor}
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 374 |   because it will not satisfy assumption @{text "is_unit_unit_factor"} of
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 375 |   @{class semidom_divide_unit_factor}.
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 376 | \<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 377 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 378 | definition fls_base_factor :: "('a::zero) fls \<Rightarrow> 'a fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 379 | where fls_base_factor_def[simp]: "fls_base_factor f = fls_shift (fls_subdegree f) f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 380 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 381 | lemma fls_base_factor_nth: "fls_base_factor f $$ n = f $$ (n + fls_subdegree f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 382 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 383 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 384 | lemma fls_base_factor_nonzero [simp]: "f \<noteq> 0 \<Longrightarrow> fls_base_factor f \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 385 | using fls_nonzeroI[of "fls_base_factor f" 0] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 386 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 387 | lemma fls_base_factor_subdegree [simp]: "fls_subdegree (fls_base_factor f) = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 388 | by (cases "f=0") auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 389 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 390 | lemma fls_base_factor_base [simp]: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 391 | "fls_base_factor f $$ fls_subdegree (fls_base_factor f) = f $$ fls_subdegree f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 392 | using fls_base_factor_subdegree[of f] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 393 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 394 | lemma fls_conv_base_factor_shift_subdegree: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 395 | "f = fls_shift (-fls_subdegree f) (fls_base_factor f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 396 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 397 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 398 | lemma fls_base_factor_idem: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 399 | "fls_base_factor (fls_base_factor (f::'a::zero fls)) = fls_base_factor f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 400 | using fls_base_factor_subdegree[of f] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 401 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 402 | lemma fls_base_factor_zero: "fls_base_factor (0::'a::zero fls) = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 403 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 404 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 405 | lemma fls_base_factor_zero_iff: "fls_base_factor (f::'a::zero fls) = 0 \<longleftrightarrow> f = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 406 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 407 | have "fls_shift (-fls_subdegree f) (fls_shift (fls_subdegree f) f) = f" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 408 | thus "fls_base_factor f = 0 \<Longrightarrow> f=0" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 409 | qed simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 410 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 411 | lemma fls_base_factor_nth_0: "f \<noteq> 0 \<Longrightarrow> fls_base_factor f $$ 0 \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 412 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 413 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 414 | lemma fls_base_factor_one: "fls_base_factor (1::'a::{zero,one} fls) = 1"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 415 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 416 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 417 | lemma fls_base_factor_const: "fls_base_factor (fls_const c) = fls_const c" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 418 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 419 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 420 | lemma fls_base_factor_delta: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 421 | "fls_base_factor (Abs_fls (\<lambda>n. if n=a then c else 0)) = fls_const c" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 422 | by (cases "c=0") (auto intro: fls_eqI) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 423 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 424 | lemma fls_base_factor_X: "fls_base_factor (fls_X::'a::{zero_neq_one} fls) = 1"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 425 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 426 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 427 | lemma fls_base_factor_X_inv: "fls_base_factor (fls_X_inv::'a::{zero_neq_one} fls) = 1"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 428 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 429 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 430 | lemma fls_base_factor_shift [simp]: "fls_base_factor (fls_shift n f) = fls_base_factor f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 431 | by (cases "f=0") simp_all | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 432 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 433 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 434 | subsection \<open>Conversion between formal power and Laurent series\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 435 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 436 | subsubsection \<open>Converting Laurent to power series\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 437 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 438 | text \<open> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 439 | We can truncate a Laurent series at index 0 to create a power series, called the regular part. | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 440 | \<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 441 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 442 | lift_definition fls_regpart :: "('a::zero) fls \<Rightarrow> 'a fps"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 443 | is "\<lambda>f. Abs_fps (\<lambda>n. f (int n))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 444 | . | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 445 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 446 | lemma fls_regpart_nth [simp]: "fls_regpart f $ n = f $$ (int n)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 447 | by (simp add: fls_regpart_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 448 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 449 | lemma fls_regpart_zero [simp]: "fls_regpart 0 = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 450 | by (intro fps_ext) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 451 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 452 | lemma fls_regpart_one [simp]: "fls_regpart 1 = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 453 | by (intro fps_ext) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 454 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 455 | lemma fls_regpart_Abs_fls: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 456 | "\<forall>\<^sub>\<infinity>n. F (- int n) = 0 \<Longrightarrow> fls_regpart (Abs_fls F) = Abs_fps (\<lambda>n. F (int n))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 457 | by (intro fps_ext) auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 458 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 459 | lemma fls_regpart_delta: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 460 | "fls_regpart (Abs_fls (\<lambda>n. if n=a then b else 0)) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 461 | (if a < 0 then 0 else Abs_fps (\<lambda>n. if n=nat a then b else 0))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 462 | by (rule fps_ext, auto) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 463 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 464 | lemma fls_regpart_const [simp]: "fls_regpart (fls_const c) = fps_const c" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 465 | by (intro fps_ext) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 466 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 467 | lemma fls_regpart_fls_X [simp]: "fls_regpart fls_X = fps_X" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 468 | by (intro fps_ext) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 469 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 470 | lemma fls_regpart_fls_X_inv [simp]: "fls_regpart fls_X_inv = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 471 | by (intro fps_ext) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 472 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 473 | lemma fls_regpart_eq0_imp_nonpos_subdegree: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 474 | assumes "fls_regpart f = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 475 | shows "fls_subdegree f \<le> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 476 | proof (cases "f=0") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 477 | case False | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 478 | have "fls_subdegree f \<ge> 0 \<Longrightarrow> f $$ fls_subdegree f = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 479 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 480 | assume "fls_subdegree f \<ge> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 481 | hence "f $$ (fls_subdegree f) = (fls_regpart f) $ (nat (fls_subdegree f))" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 482 | with assms show "f $$ (fls_subdegree f) = 0" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 483 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 484 | with False show ?thesis by fastforce | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 485 | qed simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 486 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 487 | lemma fls_subdegree_lt_fls_regpart_subdegree: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 488 | "fls_subdegree f \<le> int (subdegree (fls_regpart f))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 489 | using fls_subdegree_leI nth_subdegree_nonzero[of "fls_regpart f"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 490 | by (cases "(fls_regpart f) = 0") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 491 | (simp_all add: fls_regpart_eq0_imp_nonpos_subdegree) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 492 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 493 | lemma fls_regpart_subdegree_conv: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 494 | assumes "fls_subdegree f \<ge> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 495 | shows "subdegree (fls_regpart f) = nat (fls_subdegree f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 496 | \<comment>\<open> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 497 | This is the best we can do since if the subdegree is negative, we might still have the bad luck | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 498 | that the term at index 0 is equal to 0. | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 499 | \<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 500 | proof (cases "f=0") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 501 | case False with assms show ?thesis by (intro subdegreeI) simp_all | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 502 | qed simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 503 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 504 | lemma fls_eq_conv_fps_eqI: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 505 | assumes "0 \<le> fls_subdegree f" "0 \<le> fls_subdegree g" "fls_regpart f = fls_regpart g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 506 | shows "f = g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 507 | proof (rule fls_eq_above_subdegreeI, rule assms(1), rule assms(2), clarify) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 508 | fix k::int assume "0 \<le> k" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 509 | with assms(3) show "f $$ k = g $$ k" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 510 | using fls_regpart_nth[of f "nat k"] fls_regpart_nth[of g] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 511 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 512 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 513 | lemma fls_regpart_shift_conv_fps_shift: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 514 | "m \<ge> 0 \<Longrightarrow> fls_regpart (fls_shift m f) = fps_shift (nat m) (fls_regpart f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 515 | by (intro fps_ext) simp_all | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 516 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 517 | lemma fps_shift_fls_regpart_conv_fls_shift: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 518 | "fps_shift m (fls_regpart f) = fls_regpart (fls_shift m f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 519 | by (intro fps_ext) simp_all | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 520 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 521 | lemma fps_unit_factor_fls_regpart: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 522 | "fls_subdegree f \<ge> 0 \<Longrightarrow> unit_factor (fls_regpart f) = fls_regpart (fls_base_factor f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 523 | by (auto intro: fps_ext simp: fls_regpart_subdegree_conv) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 524 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 525 | text \<open> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 526 | The terms below the zeroth form a polynomial in the inverse of the implied variable, | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 527 | called the principle part. | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 528 | \<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 529 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 530 | lift_definition fls_prpart :: "('a::zero) fls \<Rightarrow> 'a poly"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 531 | is "\<lambda>f. Abs_poly (\<lambda>n. if n = 0 then 0 else f (- int n))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 532 | . | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 533 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 534 | lemma fls_prpart_coeff [simp]: "coeff (fls_prpart f) n = (if n = 0 then 0 else f $$ (- int n))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 535 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 536 |   have "{x. (if x = 0 then 0 else f $$ - int x) \<noteq> 0} \<subseteq> {x. f $$ - int x \<noteq> 0}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 537 | by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 538 |   hence "finite {x. (if x = 0 then 0 else f $$ - int x) \<noteq> 0}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 539 | using fls_finite_nonzero_neg_nth[of f] by (simp add: rev_finite_subset) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 540 | hence "coeff (fls_prpart f) = (\<lambda>n. if n = 0 then 0 else f $$ (- int n))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 541 | using Abs_poly_inverse[OF CollectI, OF iffD2, OF eventually_cofinite] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 542 | by (simp add: fls_prpart_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 543 | thus ?thesis by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 544 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 545 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 546 | lemma fls_prpart_eq0_iff: "(fls_prpart f = 0) \<longleftrightarrow> (fls_subdegree f \<ge> 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 547 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 548 | assume 1: "fls_prpart f = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 549 | show "fls_subdegree f \<ge> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 550 | proof (intro fls_subdegree_ge0I) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 551 | fix k::int assume "k < 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 552 | with 1 show "f $$ k = 0" using fls_prpart_coeff[of f "nat (-k)"] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 553 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 554 | qed (intro poly_eqI, simp) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 555 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 556 | lemma fls_prpart0 [simp]: "fls_prpart 0 = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 557 | by (simp add: fls_prpart_eq0_iff) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 558 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 559 | lemma fls_prpart_one [simp]: "fls_prpart 1 = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 560 | by (simp add: fls_prpart_eq0_iff) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 561 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 562 | lemma fls_prpart_delta: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 563 | "fls_prpart (Abs_fls (\<lambda>n. if n=a then b else 0)) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 564 | (if a<0 then Poly (replicate (nat (-a)) 0 @ [b]) else 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 565 | by (intro poly_eqI) (auto simp: nth_default_def nth_append) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 566 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 567 | lemma fls_prpart_const [simp]: "fls_prpart (fls_const c) = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 568 | by (simp add: fls_prpart_eq0_iff) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 569 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 570 | lemma fls_prpart_X [simp]: "fls_prpart fls_X = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 571 | by (intro poly_eqI) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 572 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 573 | lemma fls_prpart_X_inv: "fls_prpart fls_X_inv = [:0,1:]" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 574 | proof (intro poly_eqI) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 575 | fix n show "coeff (fls_prpart fls_X_inv) n = coeff [:0,1:] n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 576 | proof (cases n) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 577 | case (Suc i) thus ?thesis by (cases i) simp_all | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 578 | qed simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 579 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 580 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 581 | lemma degree_fls_prpart [simp]: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 582 | "degree (fls_prpart f) = nat (-fls_subdegree f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 583 | proof (cases "f=0") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 584 | case False show ?thesis unfolding degree_def | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 585 | proof (intro Least_equality) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 586 | fix N assume N: "\<forall>i>N. coeff (fls_prpart f) i = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 587 | have "\<forall>i < -int N. f $$ i = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 588 | proof clarify | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 589 | fix i assume i: "i < -int N" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 590 | hence "nat (-i) > N" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 591 | with N i show "f $$ i = 0" using fls_prpart_coeff[of f "nat (-i)"] by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 592 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 593 | with False have "fls_subdegree f \<ge> -int N" using fls_subdegree_geI by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 594 | thus "nat (- fls_subdegree f) \<le> N" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 595 | qed auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 596 | qed simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 597 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 598 | lemma fls_prpart_shift: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 599 | assumes "m \<le> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 600 | shows "fls_prpart (fls_shift m f) = pCons 0 (poly_shift (Suc (nat (-m))) (fls_prpart f))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 601 | proof (intro poly_eqI) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 602 | fix n | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 603 | define LHS RHS | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 604 | where "LHS \<equiv> fls_prpart (fls_shift m f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 605 | and "RHS \<equiv> pCons 0 (poly_shift (Suc (nat (-m))) (fls_prpart f))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 606 | show "coeff LHS n = coeff RHS n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 607 | proof (cases n) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 608 | case (Suc k) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 609 | from assms have 1: "-int (Suc k + nat (-m)) = -int (Suc k) + m" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 610 | have "coeff RHS n = f $$ (-int (Suc k) + m)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 611 | using arg_cong[OF 1, of "($$) f"] by (simp add: Suc RHS_def coeff_poly_shift) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 612 | with Suc show ?thesis by (simp add: LHS_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 613 | qed (simp add: LHS_def RHS_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 614 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 615 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 616 | lemma fls_prpart_base_factor: "fls_prpart (fls_base_factor f) = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 617 | using fls_base_factor_subdegree[of f] by (simp add: fls_prpart_eq0_iff) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 618 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 619 | text \<open>The essential data of a formal Laurant series resides from the subdegree up.\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 620 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 621 | abbreviation fls_base_factor_to_fps :: "('a::zero) fls \<Rightarrow> 'a fps"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 622 | where "fls_base_factor_to_fps f \<equiv> fls_regpart (fls_base_factor f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 623 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 624 | lemma fls_base_factor_to_fps_conv_fps_shift: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 625 | assumes "fls_subdegree f \<ge> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 626 | shows "fls_base_factor_to_fps f = fps_shift (nat (fls_subdegree f)) (fls_regpart f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 627 | by (simp add: assms fls_regpart_shift_conv_fps_shift) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 628 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 629 | lemma fls_base_factor_to_fps_nth: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 630 | "fls_base_factor_to_fps f $ n = f $$ (fls_subdegree f + int n)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 631 | by (simp add: algebra_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 632 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 633 | lemma fls_base_factor_to_fps_base: "f \<noteq> 0 \<Longrightarrow> fls_base_factor_to_fps f $ 0 \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 634 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 635 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 636 | lemma fls_base_factor_to_fps_nonzero: "f \<noteq> 0 \<Longrightarrow> fls_base_factor_to_fps f \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 637 | using fps_nonzeroI[of "fls_base_factor_to_fps f" 0] fls_base_factor_to_fps_base by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 638 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 639 | lemma fls_base_factor_to_fps_subdegree [simp]: "subdegree (fls_base_factor_to_fps f) = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 640 | by (cases "f=0") auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 641 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 642 | lemma fls_base_factor_to_fps_trivial: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 643 | "fls_subdegree f = 0 \<Longrightarrow> fls_base_factor_to_fps f = fls_regpart f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 644 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 645 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 646 | lemma fls_base_factor_to_fps_zero: "fls_base_factor_to_fps 0 = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 647 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 648 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 649 | lemma fls_base_factor_to_fps_one: "fls_base_factor_to_fps 1 = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 650 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 651 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 652 | lemma fls_base_factor_to_fps_delta: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 653 | "fls_base_factor_to_fps (Abs_fls (\<lambda>n. if n=a then c else 0)) = fps_const c" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 654 | using fls_base_factor_delta[of a c] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 655 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 656 | lemma fls_base_factor_to_fps_const: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 657 | "fls_base_factor_to_fps (fls_const c) = fps_const c" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 658 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 659 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 660 | lemma fls_base_factor_to_fps_X: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 661 |   "fls_base_factor_to_fps (fls_X::'a::{zero_neq_one} fls) = 1"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 662 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 663 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 664 | lemma fls_base_factor_to_fps_X_inv: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 665 |   "fls_base_factor_to_fps (fls_X_inv::'a::{zero_neq_one} fls) = 1"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 666 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 667 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 668 | lemma fls_base_factor_to_fps_shift: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 669 | "fls_base_factor_to_fps (fls_shift m f) = fls_base_factor_to_fps f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 670 | using fls_base_factor_shift[of m f] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 671 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 672 | lemma fls_base_factor_to_fps_base_factor: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 673 | "fls_base_factor_to_fps (fls_base_factor f) = fls_base_factor_to_fps f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 674 | using fls_base_factor_to_fps_shift by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 675 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 676 | lemma fps_unit_factor_fls_base_factor: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 677 | "unit_factor (fls_base_factor_to_fps f) = fls_base_factor_to_fps f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 678 | using fls_base_factor_to_fps_subdegree[of f] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 679 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 680 | subsubsection \<open>Converting power to Laurent series\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 681 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 682 | text \<open>We can extend a power series by 0s below to create a Laurent series.\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 683 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 684 | definition fps_to_fls :: "('a::zero) fps \<Rightarrow> 'a fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 685 | where "fps_to_fls f \<equiv> Abs_fls (\<lambda>k::int. if k<0 then 0 else f $ (nat k))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 686 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 687 | lemma fps_to_fls_nth [simp]: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 688 | "(fps_to_fls f) $$ n = (if n < 0 then 0 else f$(nat n))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 689 | using nth_Abs_fls_lower_bound[of 0 "(\<lambda>k::int. if k<0 then 0 else f $ (nat k))"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 690 | unfolding fps_to_fls_def | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 691 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 692 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 693 | lemma fps_to_fls_eq_imp_fps_eq: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 694 | assumes "fps_to_fls f = fps_to_fls g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 695 | shows "f = g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 696 | proof (intro fps_ext) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 697 | fix n | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 698 | have "f $ n = fps_to_fls g $$ int n" by (simp add: assms[symmetric]) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 699 | thus "f $ n = g $ n" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 700 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 701 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 702 | lemma fps_zero_to_fls [simp]: "fps_to_fls 0 = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 703 | by (intro fls_zero_eqI) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 704 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 705 | lemma fps_to_fls_nonzeroI: "f \<noteq> 0 \<Longrightarrow> fps_to_fls f \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 706 | using fps_to_fls_eq_imp_fps_eq[of f 0] by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 707 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 708 | lemma fps_one_to_fls [simp]: "fps_to_fls 1 = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 709 | by (intro fls_eqI) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 710 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 711 | lemma fps_to_fls_Abs_fps: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 712 | "fps_to_fls (Abs_fps F) = Abs_fls (\<lambda>n. if n<0 then 0 else F (nat n))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 713 | using nth_Abs_fls_lower_bound[of 0 "(\<lambda>n::int. if n<0 then 0 else F (nat n))"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 714 | by (intro fls_eqI) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 715 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 716 | lemma fps_delta_to_fls: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 717 | "fps_to_fls (Abs_fps (\<lambda>n. if n=a then b else 0)) = Abs_fls (\<lambda>n. if n=int a then b else 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 718 | using fls_eqI[of _ "Abs_fls (\<lambda>n. if n=int a then b else 0)"] by force | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 719 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 720 | lemma fps_const_to_fls [simp]: "fps_to_fls (fps_const c) = fls_const c" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 721 | by (intro fls_eqI) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 722 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 723 | lemma fps_X_to_fls [simp]: "fps_to_fls fps_X = fls_X" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 724 | by (fastforce intro: fls_eqI) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 725 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 726 | lemma fps_to_fls_eq_zero_iff: "(fps_to_fls f = 0) \<longleftrightarrow> (f=0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 727 | using fps_to_fls_nonzeroI by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 728 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 729 | lemma fls_subdegree_fls_to_fps_gt0: "fls_subdegree (fps_to_fls f) \<ge> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 730 | proof (cases "f=0") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 731 | case False show ?thesis | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 732 | proof (rule fls_subdegree_geI, rule fls_nonzeroI) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 733 | from False show "fps_to_fls f $$ int (subdegree f) \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 734 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 735 | qed simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 736 | qed simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 737 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 738 | lemma fls_subdegree_fls_to_fps: "fls_subdegree (fps_to_fls f) = int (subdegree f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 739 | proof (cases "f=0") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 740 | case False | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 741 | have "subdegree f = nat (fls_subdegree (fps_to_fls f))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 742 | proof (rule subdegreeI) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 743 | from False show "f $ (nat (fls_subdegree (fps_to_fls f))) \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 744 | using fls_subdegree_fls_to_fps_gt0[of f] nth_fls_subdegree_nonzero[of "fps_to_fls f"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 745 | fps_to_fls_nonzeroI[of f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 746 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 747 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 748 | fix k assume k: "k < nat (fls_subdegree (fps_to_fls f))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 749 | thus "f $ k = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 750 | using fls_eq0_below_subdegree[of "int k" "fps_to_fls f"] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 751 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 752 | thus ?thesis by (simp add: fls_subdegree_fls_to_fps_gt0) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 753 | qed simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 754 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 755 | lemma fps_shift_to_fls [simp]: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 756 | "n \<le> subdegree f \<Longrightarrow> fps_to_fls (fps_shift n f) = fls_shift (int n) (fps_to_fls f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 757 | by (auto intro: fls_eqI simp: nat_add_distrib nth_less_subdegree_zero) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 758 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 759 | lemma fls_base_factor_fps_to_fls: "fls_base_factor (fps_to_fls f) = fps_to_fls (unit_factor f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 760 | using nth_less_subdegree_zero[of _ f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 761 | by (auto intro: fls_eqI simp: fls_subdegree_fls_to_fps nat_add_distrib) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 762 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 763 | lemma fls_regpart_to_fls_trivial [simp]: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 764 | "fls_subdegree f \<ge> 0 \<Longrightarrow> fps_to_fls (fls_regpart f) = f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 765 | by (intro fls_eqI) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 766 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 767 | lemma fls_regpart_fps_trivial [simp]: "fls_regpart (fps_to_fls f) = f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 768 | by (intro fps_ext) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 769 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 770 | lemma fps_to_fls_base_factor_to_fps: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 771 | "fps_to_fls (fls_base_factor_to_fps f) = fls_base_factor f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 772 | by (intro fls_eqI) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 773 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 774 | lemma fls_conv_base_factor_to_fps_shift_subdegree: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 775 | "f = fls_shift (-fls_subdegree f) (fps_to_fls (fls_base_factor_to_fps f))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 776 | using fps_to_fls_base_factor_to_fps[of f] fps_to_fls_base_factor_to_fps[of f] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 777 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 778 | lemma fls_base_factor_to_fps_to_fls: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 779 | "fls_base_factor_to_fps (fps_to_fls f) = unit_factor f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 780 | using fls_base_factor_fps_to_fls[of f] fls_regpart_fps_trivial[of "unit_factor f"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 781 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 782 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 783 | abbreviation | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 784 | "fls_regpart_as_fls f \<equiv> fps_to_fls (fls_regpart f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 785 | abbreviation | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 786 | "fls_prpart_as_fls f \<equiv> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 787 | fls_shift (-fls_subdegree f) (fps_to_fls (fps_of_poly (reflect_poly (fls_prpart f))))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 788 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 789 | lemma fls_regpart_as_fls_nth: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 790 | "fls_regpart_as_fls f $$ n = (if n < 0 then 0 else f $$ n)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 791 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 792 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 793 | lemma fls_regpart_idem: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 794 | "fls_regpart (fls_regpart_as_fls f) = fls_regpart f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 795 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 796 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 797 | lemma fls_prpart_as_fls_nth: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 798 | "fls_prpart_as_fls f $$ n = (if n < 0 then f $$ n else 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 799 | proof (cases "n < fls_subdegree f" "n < 0" rule: case_split[case_product case_split]) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 800 | case False_True | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 801 | hence "nat (-fls_subdegree f) - nat (n - fls_subdegree f) = nat (-n)" by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 802 | with False_True show ?thesis | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 803 | using coeff_reflect_poly[of "fls_prpart f" "nat (n - fls_subdegree f)"] by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 804 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 805 | case False_False thus ?thesis | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 806 | using coeff_reflect_poly[of "fls_prpart f" "nat (n - fls_subdegree f)"] by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 807 | qed simp_all | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 808 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 809 | lemma fls_prpart_idem [simp]: "fls_prpart (fls_prpart_as_fls f) = fls_prpart f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 810 | using fls_prpart_as_fls_nth[of f] by (intro poly_eqI) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 811 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 812 | lemma fls_regpart_prpart: "fls_regpart (fls_prpart_as_fls f) = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 813 | using fls_prpart_as_fls_nth[of f] by (intro fps_ext) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 814 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 815 | lemma fls_prpart_regpart: "fls_prpart (fls_regpart_as_fls f) = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 816 | by (intro poly_eqI) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 817 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 818 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 819 | subsection \<open>Algebraic structures\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 820 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 821 | subsubsection \<open>Addition\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 822 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 823 | instantiation fls :: (monoid_add) plus | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 824 | begin | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 825 | lift_definition plus_fls :: "'a fls \<Rightarrow> 'a fls \<Rightarrow> 'a fls" is "\<lambda>f g n. f n + g n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 826 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 827 | fix f f' :: "int \<Rightarrow> 'a" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 828 | assume "\<forall>\<^sub>\<infinity>n. f (- int n) = 0" "\<forall>\<^sub>\<infinity>n. f' (- int n) = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 829 | from this obtain N N' where "\<forall>n>N. f (-int n) = 0" "\<forall>n>N'. f' (-int n) = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 830 | by (auto simp: MOST_nat) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 831 | hence "\<forall>n > max N N'. f (-int n) + f' (-int n) = 0" by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 832 | hence "\<exists>K. \<forall>n>K. f (-int n) + f' (-int n) = 0" by fast | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 833 | thus "\<forall>\<^sub>\<infinity>n. f (- int n) + f' (-int n) = 0" by (simp add: MOST_nat) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 834 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 835 | instance .. | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 836 | end | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 837 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 838 | lemma fls_plus_nth [simp]: "(f + g) $$ n = f $$ n + g $$ n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 839 | by transfer simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 840 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 841 | lemma fls_plus_const: "fls_const x + fls_const y = fls_const (x+y)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 842 | by (intro fls_eqI) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 843 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 844 | lemma fls_plus_subdegree: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 845 | "f + g \<noteq> 0 \<Longrightarrow> fls_subdegree (f + g) \<ge> min (fls_subdegree f) (fls_subdegree g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 846 | by (auto intro: fls_subdegree_geI) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 847 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 848 | lemma fls_shift_plus [simp]: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 849 | "fls_shift m (f + g) = (fls_shift m f) + (fls_shift m g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 850 | by (intro fls_eqI) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 851 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 852 | lemma fls_regpart_plus [simp]: "fls_regpart (f + g) = fls_regpart f + fls_regpart g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 853 | by (intro fps_ext) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 854 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 855 | lemma fls_prpart_plus [simp] : "fls_prpart (f + g) = fls_prpart f + fls_prpart g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 856 | by (intro poly_eqI) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 857 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 858 | lemma fls_decompose_reg_pr_parts: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 859 | fixes f :: "'a :: monoid_add fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 860 | defines "R \<equiv> fls_regpart_as_fls f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 861 | and "P \<equiv> fls_prpart_as_fls f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 862 | shows "f = P + R" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 863 | and "f = R + P" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 864 | using fls_prpart_as_fls_nth[of f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 865 | by (auto intro: fls_eqI simp add: assms) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 866 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 867 | lemma fps_to_fls_plus [simp]: "fps_to_fls (f + g) = fps_to_fls f + fps_to_fls g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 868 | by (intro fls_eqI) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 869 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 870 | instance fls :: (monoid_add) monoid_add | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 871 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 872 | fix a b c :: "'a fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 873 | show "a + b + c = a + (b + c)" by transfer (simp add: add.assoc) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 874 | show "0 + a = a" by transfer simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 875 | show "a + 0 = a" by transfer simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 876 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 877 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 878 | instance fls :: (comm_monoid_add) comm_monoid_add | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 879 | by (standard, transfer, auto simp: add.commute) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 880 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 881 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 882 | subsubsection \<open>Subtraction and negatives\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 883 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 884 | instantiation fls :: (group_add) minus | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 885 | begin | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 886 | lift_definition minus_fls :: "'a fls \<Rightarrow> 'a fls \<Rightarrow> 'a fls" is "\<lambda>f g n. f n - g n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 887 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 888 | fix f f' :: "int \<Rightarrow> 'a" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 889 | assume "\<forall>\<^sub>\<infinity>n. f (- int n) = 0" "\<forall>\<^sub>\<infinity>n. f' (- int n) = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 890 | from this obtain N N' where "\<forall>n>N. f (-int n) = 0" "\<forall>n>N'. f' (-int n) = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 891 | by (auto simp: MOST_nat) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 892 | hence "\<forall>n > max N N'. f (-int n) - f' (-int n) = 0" by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 893 | hence "\<exists>K. \<forall>n>K. f (-int n) - f' (-int n) = 0" by fast | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 894 | thus "\<forall>\<^sub>\<infinity>n. f (- int n) - f' (-int n) = 0" by (simp add: MOST_nat) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 895 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 896 | instance .. | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 897 | end | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 898 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 899 | lemma fls_minus_nth [simp]: "(f - g) $$ n = f $$ n - g $$ n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 900 | by transfer simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 901 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 902 | lemma fls_minus_const: "fls_const x - fls_const y = fls_const (x-y)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 903 | by (intro fls_eqI) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 904 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 905 | lemma fls_subdegree_minus: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 906 | "f - g \<noteq> 0 \<Longrightarrow> fls_subdegree (f - g) \<ge> min (fls_subdegree f) (fls_subdegree g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 907 | by (intro fls_subdegree_geI) simp_all | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 908 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 909 | lemma fls_shift_minus [simp]: "fls_shift m (f - g) = (fls_shift m f) - (fls_shift m g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 910 | by (auto intro: fls_eqI) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 911 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 912 | lemma fls_regpart_minus [simp]: "fls_regpart (f - g) = fls_regpart f - fls_regpart g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 913 | by (intro fps_ext) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 914 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 915 | lemma fls_prpart_minus [simp] : "fls_prpart (f - g) = fls_prpart f - fls_prpart g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 916 | by (intro poly_eqI) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 917 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 918 | lemma fps_to_fls_minus [simp]: "fps_to_fls (f - g) = fps_to_fls f - fps_to_fls g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 919 | by (intro fls_eqI) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 920 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 921 | instantiation fls :: (group_add) uminus | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 922 | begin | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 923 | lift_definition uminus_fls :: "'a fls \<Rightarrow> 'a fls" is "\<lambda>f n. - f n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 924 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 925 | fix f :: "int \<Rightarrow> 'a" assume "\<forall>\<^sub>\<infinity>n. f (- int n) = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 926 | from this obtain N where "\<forall>n>N. f (-int n) = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 927 | by (auto simp: MOST_nat) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 928 | hence "\<forall>n>N. - f (-int n) = 0" by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 929 | hence "\<exists>K. \<forall>n>K. - f (-int n) = 0" by fast | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 930 | thus "\<forall>\<^sub>\<infinity>n. - f (- int n) = 0" by (simp add: MOST_nat) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 931 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 932 | instance .. | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 933 | end | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 934 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 935 | lemma fls_uminus_nth [simp]: "(-f) $$ n = - (f $$ n)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 936 | by transfer simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 937 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 938 | lemma fls_const_uminus[simp]: "fls_const (-x) = -fls_const x" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 939 | by (intro fls_eqI) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 940 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 941 | lemma fls_shift_uminus [simp]: "fls_shift m (- f) = - (fls_shift m f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 942 | by (auto intro: fls_eqI) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 943 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 944 | lemma fls_regpart_uminus [simp]: "fls_regpart (- f) = - fls_regpart f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 945 | by (intro fps_ext) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 946 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 947 | lemma fls_prpart_uminus [simp] : "fls_prpart (- f) = - fls_prpart f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 948 | by (intro poly_eqI) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 949 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 950 | lemma fps_to_fls_uminus [simp]: "fps_to_fls (- f) = - fps_to_fls f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 951 | by (intro fls_eqI) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 952 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 953 | instance fls :: (group_add) group_add | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 954 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 955 | fix a b :: "'a fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 956 | show "- a + a = 0" by transfer simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 957 | show "a + - b = a - b" by transfer simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 958 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 959 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 960 | instance fls :: (ab_group_add) ab_group_add | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 961 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 962 | fix a b :: "'a fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 963 | show "- a + a = 0" by transfer simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 964 | show "a - b = a + - b" by transfer simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 965 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 966 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 967 | lemma fls_uminus_subdegree [simp]: "fls_subdegree (-f) = fls_subdegree f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 968 | by (cases "f=0") (auto intro: fls_subdegree_eqI) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 969 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 970 | lemma fls_subdegree_minus_sym: "fls_subdegree (g - f) = fls_subdegree (f - g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 971 | using fls_uminus_subdegree[of "g-f"] by (simp add: algebra_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 972 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 973 | lemma fls_regpart_sub_prpart: "fls_regpart (f - fls_prpart_as_fls f) = fls_regpart f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 974 | using fls_decompose_reg_pr_parts(2)[of f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 975 | add_diff_cancel[of "fls_regpart_as_fls f" "fls_prpart_as_fls f"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 976 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 977 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 978 | lemma fls_prpart_sub_regpart: "fls_prpart (f - fls_regpart_as_fls f) = fls_prpart f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 979 | using fls_decompose_reg_pr_parts(1)[of f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 980 | add_diff_cancel[of "fls_prpart_as_fls f" "fls_regpart_as_fls f"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 981 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 982 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 983 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 984 | subsubsection \<open>Multiplication\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 985 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 986 | instantiation fls :: ("{comm_monoid_add, times}") times
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 987 | begin | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 988 | definition fls_times_def: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 989 | "(*) = (\<lambda>f g. | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 990 | fls_shift | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 991 | (- (fls_subdegree f + fls_subdegree g)) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 992 | (fps_to_fls (fls_base_factor_to_fps f * fls_base_factor_to_fps g)) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 993 | )" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 994 | instance .. | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 995 | end | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 996 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 997 | lemma fls_times_nth_eq0: "n < fls_subdegree f + fls_subdegree g \<Longrightarrow> (f * g) $$ n = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 998 | by (simp add: fls_times_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 999 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1000 | lemma fls_times_nth: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1001 | fixes f df g dg | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1002 | defines "df \<equiv> fls_subdegree f" and "dg \<equiv> fls_subdegree g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1003 | shows "(f * g) $$ n = (\<Sum>i=df + dg..n. f $$ (i - dg) * g $$ (dg + n - i))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1004 | and "(f * g) $$ n = (\<Sum>i=df..n - dg. f $$ i * g $$ (n - i))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1005 | and "(f * g) $$ n = (\<Sum>i=dg..n - df. f $$ (df + i - dg) * g $$ (dg + n - df - i))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1006 | and "(f * g) $$ n = (\<Sum>i=0..n - (df + dg). f $$ (df + i) * g $$ (n - df - i))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1007 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1008 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1009 | define dfg where "dfg \<equiv> df + dg" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1010 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1011 | show 4: "(f * g) $$ n = (\<Sum>i=0..n - dfg. f $$ (df + i) * g $$ (n - df - i))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1012 | proof (cases "n < dfg") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1013 | case False | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1014 | from False assms have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1015 | "(f * g) $$ n = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1016 | (\<Sum>i = 0..nat (n - dfg). f $$ (df + int i) * g $$ (dg + int (nat (n - dfg) - i)))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1017 | using fps_mult_nth[of "fls_base_factor_to_fps f" "fls_base_factor_to_fps g"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1018 | fls_base_factor_to_fps_nth[of f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1019 | fls_base_factor_to_fps_nth[of g] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1020 | by (simp add: dfg_def fls_times_def algebra_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1021 | moreover from False have index: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1022 |       "\<And>i. i \<in> {0..nat (n - dfg)} \<Longrightarrow> dg + int (nat (n - dfg) - i) = n - df - int i"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1023 | by (auto simp: dfg_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1024 | ultimately have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1025 | "(f * g) $$ n = (\<Sum>i=0..nat (n - dfg). f $$ (df + int i) * g $$ (n - df - int i))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1026 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1027 | moreover have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1028 | "(\<Sum>i=0..nat (n - dfg). f $$ (df + int i) * g $$ (n - df - int i)) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1029 | (\<Sum>i=0..n - dfg. f $$ (df + i) * g $$ (n - df - i))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1030 | proof (intro sum.reindex_cong) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1031 |       show "inj_on nat {0..n - dfg}" by standard auto
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1032 |       show "{0..nat (n - dfg)} = nat ` {0..n - dfg}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1033 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1034 |         show "{0..nat (n - dfg)} \<subseteq> nat ` {0..n - dfg}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1035 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1036 |           fix i assume "i \<in> {0..nat (n - dfg)}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1037 | hence i: "i \<ge> 0" "i \<le> nat (n - dfg)" by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1038 | with False have "int i \<ge> 0" "int i \<le> n - dfg" by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1039 |           hence "int i \<in> {0..n - dfg}" by simp
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1040 | moreover from i(1) have "i = nat (int i)" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1041 |           ultimately show "i \<in> nat ` {0..n - dfg}" by fast
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1042 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1043 | qed (auto simp: False) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1044 | qed (simp add: False) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1045 | ultimately show "(f * g) $$ n = (\<Sum>i=0..n - dfg. f $$ (df + i) * g $$ (n - df - i))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1046 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1047 | qed (simp add: fls_times_nth_eq0 assms dfg_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1048 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1049 | have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1050 | "(\<Sum>i=dfg..n. f $$ (i - dg) * g $$ (dg + n - i)) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1051 | (\<Sum>i=0..n - dfg. f $$ (df + i) * g $$ (n - df - i))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1052 | proof (intro sum.reindex_cong) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1053 | define T where "T \<equiv> \<lambda>i. i + dfg" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1054 |     show "inj_on T {0..n - dfg}" by standard (simp add: T_def)
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1055 | qed (simp_all add: dfg_def algebra_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1056 | with 4 show 1: "(f * g) $$ n = (\<Sum>i=dfg..n. f $$ (i - dg) * g $$ (dg + n - i))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1057 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1058 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1059 | have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1060 | "(\<Sum>i=dfg..n. f $$ (i - dg) * g $$ (dg + n - i)) = (\<Sum>i=df..n - dg. f $$ i * g $$ (n - i))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1061 | proof (intro sum.reindex_cong) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1062 | define T where "T \<equiv> \<lambda>i. i + dg" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1063 |     show "inj_on T {df..n - dg}" by standard (simp add: T_def)
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1064 | qed (auto simp: dfg_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1065 | with 1 show "(f * g) $$ n = (\<Sum>i=df..n - dg. f $$ i * g $$ (n - i))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1066 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1067 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1068 | have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1069 | "(\<Sum>i=dfg..n. f $$ (i - dg) * g $$ (dg + n - i)) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1070 | (\<Sum>i=dg..n - df. f $$ (df + i - dg) * g $$ (dg + n - df - i))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1071 | proof (intro sum.reindex_cong) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1072 | define T where "T \<equiv> \<lambda>i. i + df" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1073 |     show "inj_on T {dg..n - df}" by standard (simp add: T_def)
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1074 | qed (simp_all add: dfg_def algebra_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1075 | with 1 show "(f * g) $$ n = (\<Sum>i=dg..n - df. f $$ (df + i - dg) * g $$ (dg + n - df - i))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1076 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1077 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1078 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1079 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1080 | lemma fls_times_base [simp]: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1081 | "(f * g) $$ (fls_subdegree f + fls_subdegree g) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1082 | (f $$ fls_subdegree f) * (g $$ fls_subdegree g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1083 | by (simp add: fls_times_nth(1)) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1084 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1085 | instance fls :: ("{comm_monoid_add, mult_zero}") mult_zero
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1086 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1087 | fix a :: "'a fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1088 | have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1089 | "(0::'a fls) * a = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1090 | fls_shift (fls_subdegree a) (fps_to_fls ( (0::'a fps)*(fls_base_factor_to_fps a) ))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1091 | by (simp add: fls_times_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1092 | moreover have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1093 | "a * (0::'a fls) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1094 | fls_shift (fls_subdegree a) (fps_to_fls ( (fls_base_factor_to_fps a)*(0::'a fps) ))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1095 | by (simp add: fls_times_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1096 | ultimately show "0 * a = (0::'a fls)" "a * 0 = (0::'a fls)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1097 | by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1098 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1099 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1100 | lemma fls_mult_one: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1101 |   fixes f :: "'a::{comm_monoid_add, mult_zero, monoid_mult} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1102 | shows "1 * f = f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1103 | and "f * 1 = f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1104 | using fls_conv_base_factor_to_fps_shift_subdegree[of f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1105 | by (simp_all add: fls_times_def fps_one_mult) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1106 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1107 | lemma fls_mult_const_nth [simp]: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1108 |   fixes f :: "'a::{comm_monoid_add, mult_zero} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1109 | shows "(fls_const x * f) $$ n = x * f$$n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1110 | and "(f * fls_const x ) $$ n = f$$n * x" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1111 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1112 | show "(fls_const x * f) $$ n = x * f$$n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1113 | proof (cases "n<fls_subdegree f") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1114 | case False | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1115 |     hence "{fls_subdegree f..n} = insert (fls_subdegree f) {fls_subdegree f+1..n}" by auto
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1116 | thus ?thesis by (simp add: fls_times_nth(1)) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1117 | qed (simp add: fls_times_nth_eq0) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1118 | show "(f * fls_const x ) $$ n = f$$n * x" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1119 | proof (cases "n<fls_subdegree f") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1120 | case False | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1121 |     hence "{fls_subdegree f..n} = insert n {fls_subdegree f..n-1}" by auto
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1122 | thus ?thesis by (simp add: fls_times_nth(1)) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1123 | qed (simp add: fls_times_nth_eq0) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1124 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1125 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1126 | lemma fls_const_mult_const[simp]: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1127 |   fixes x y :: "'a::{comm_monoid_add, mult_zero}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1128 | shows "fls_const x * fls_const y = fls_const (x*y)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1129 | by (intro fls_eqI) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1130 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1131 | lemma fls_mult_subdegree_ge: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1132 |   fixes   f g :: "'a::{comm_monoid_add,mult_zero} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1133 | assumes "f*g \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1134 | shows "fls_subdegree (f*g) \<ge> fls_subdegree f + fls_subdegree g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1135 | by (auto intro: fls_subdegree_geI simp: assms fls_times_nth_eq0) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1136 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1137 | lemma fls_mult_subdegree_ge_0: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1138 |   fixes   f g :: "'a::{comm_monoid_add,mult_zero} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1139 | assumes "fls_subdegree f \<ge> 0" "fls_subdegree g \<ge> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1140 | shows "fls_subdegree (f*g) \<ge> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1141 | using assms fls_mult_subdegree_ge[of f g] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1142 | by fastforce | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1143 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1144 | lemma fls_mult_nonzero_base_subdegree_eq: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1145 |   fixes   f g :: "'a::{comm_monoid_add,mult_zero} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1146 | assumes "f $$ (fls_subdegree f) * g $$ (fls_subdegree g) \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1147 | shows "fls_subdegree (f*g) = fls_subdegree f + fls_subdegree g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1148 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1149 | from assms have "fls_subdegree (f*g) \<ge> fls_subdegree f + fls_subdegree g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1150 | using fls_nonzeroI[of "f*g" "fls_subdegree f + fls_subdegree g"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1151 | fls_mult_subdegree_ge[of f g] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1152 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1153 | moreover from assms have "fls_subdegree (f*g) \<le> fls_subdegree f + fls_subdegree g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1154 | by (intro fls_subdegree_leI) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1155 | ultimately show ?thesis by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1156 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1157 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1158 | lemma fls_subdegree_mult [simp]: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1159 | fixes f g :: "'a::semiring_no_zero_divisors fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1160 | assumes "f \<noteq> 0" "g \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1161 | shows "fls_subdegree (f * g) = fls_subdegree f + fls_subdegree g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1162 | using assms | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1163 | by (auto intro: fls_subdegree_eqI simp: fls_times_nth_eq0) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1164 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1165 | lemma fls_shifted_times_simps: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1166 |   fixes f g :: "'a::{comm_monoid_add, mult_zero} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1167 | shows "f * (fls_shift n g) = fls_shift n (f*g)" "(fls_shift n f) * g = fls_shift n (f*g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1168 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1169 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1170 | show "f * (fls_shift n g) = fls_shift n (f*g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1171 | proof (cases "g=0") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1172 | case False | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1173 | hence | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1174 | "f * (fls_shift n g) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1175 | fls_shift (- (fls_subdegree f + (fls_subdegree g - n))) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1176 | (fps_to_fls (fls_base_factor_to_fps f * fls_base_factor_to_fps g))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1177 | unfolding fls_times_def by (simp add: fls_base_factor_to_fps_shift) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1178 | thus "f * (fls_shift n g) = fls_shift n (f*g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1179 | by (simp add: algebra_simps fls_times_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1180 | qed auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1181 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1182 | show "(fls_shift n f)*g = fls_shift n (f*g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1183 | proof (cases "f=0") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1184 | case False | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1185 | hence | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1186 | "(fls_shift n f)*g = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1187 | fls_shift (- ((fls_subdegree f - n) + fls_subdegree g)) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1188 | (fps_to_fls (fls_base_factor_to_fps f * fls_base_factor_to_fps g))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1189 | unfolding fls_times_def by (simp add: fls_base_factor_to_fps_shift) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1190 | thus "(fls_shift n f) * g = fls_shift n (f*g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1191 | by (simp add: algebra_simps fls_times_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1192 | qed auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1193 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1194 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1195 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1196 | lemma fls_shifted_times_transfer: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1197 |   fixes f g :: "'a::{comm_monoid_add, mult_zero} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1198 | shows "fls_shift n f * g = f * fls_shift n g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1199 | using fls_shifted_times_simps(1)[of f n g] fls_shifted_times_simps(2)[of n f g] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1200 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1201 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1202 | lemma fls_times_both_shifted_simp: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1203 |   fixes f g :: "'a::{comm_monoid_add, mult_zero} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1204 | shows "(fls_shift m f) * (fls_shift n g) = fls_shift (m+n) (f*g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1205 | by (simp add: fls_shifted_times_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1206 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1207 | lemma fls_base_factor_mult_base_factor: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1208 |   fixes f g :: "'a::{comm_monoid_add, mult_zero} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1209 | shows "fls_base_factor (f * fls_base_factor g) = fls_base_factor (f * g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1210 | and "fls_base_factor (fls_base_factor f * g) = fls_base_factor (f * g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1211 | using fls_base_factor_shift[of "fls_subdegree g" "f*g"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1212 | fls_base_factor_shift[of "fls_subdegree f" "f*g"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1213 | by (simp_all add: fls_shifted_times_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1214 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1215 | lemma fls_base_factor_mult_both_base_factor: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1216 |   fixes f g :: "'a::{comm_monoid_add,mult_zero} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1217 | shows "fls_base_factor (fls_base_factor f * fls_base_factor g) = fls_base_factor (f * g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1218 | using fls_base_factor_mult_base_factor(1)[of "fls_base_factor f" g] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1219 | fls_base_factor_mult_base_factor(2)[of f g] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1220 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1221 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1222 | lemma fls_base_factor_mult: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1223 | fixes f g :: "'a::semiring_no_zero_divisors fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1224 | shows "fls_base_factor (f * g) = fls_base_factor f * fls_base_factor g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1225 | by (cases "f\<noteq>0 \<and> g\<noteq>0") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1226 | (auto simp: fls_times_both_shifted_simp) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1227 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1228 | lemma fls_times_conv_base_factor_times: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1229 |   fixes f g :: "'a::{comm_monoid_add, mult_zero} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1230 | shows | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1231 | "f * g = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1232 | fls_shift (-(fls_subdegree f + fls_subdegree g)) (fls_base_factor f * fls_base_factor g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1233 | by (simp add: fls_times_both_shifted_simp) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1234 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1235 | lemma fls_times_base_factor_conv_shifted_times: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1236 | \<comment> \<open>Convenience form of lemma @{text "fls_times_both_shifted_simp"}.\<close>
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1237 |   fixes f g :: "'a::{comm_monoid_add, mult_zero} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1238 | shows | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1239 | "fls_base_factor f * fls_base_factor g = fls_shift (fls_subdegree f + fls_subdegree g) (f * g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1240 | by (simp add: fls_times_both_shifted_simp) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1241 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1242 | lemma fls_times_conv_regpart: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1243 |   fixes   f g :: "'a::{comm_monoid_add,mult_zero} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1244 | assumes "fls_subdegree f \<ge> 0" "fls_subdegree g \<ge> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1245 | shows "fls_regpart (f * g) = fls_regpart f * fls_regpart g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1246 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1247 | from assms have 1: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1248 | "f * g = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1249 | fls_shift (- (fls_subdegree f + fls_subdegree g)) ( | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1250 | fps_to_fls ( | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1251 | fps_shift (nat (fls_subdegree f) + nat (fls_subdegree g)) ( | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1252 | fls_regpart f * fls_regpart g | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1253 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1254 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1255 | )" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1256 | by (simp add: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1257 | fls_times_def fls_base_factor_to_fps_conv_fps_shift[symmetric] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1258 | fls_regpart_subdegree_conv fps_shift_mult_both[symmetric] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1259 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1260 | show ?thesis | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1261 | proof (cases "fls_regpart f * fls_regpart g = 0") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1262 | case False | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1263 | with assms have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1264 | "subdegree (fls_regpart f * fls_regpart g) \<ge> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1265 | nat (fls_subdegree f) + nat (fls_subdegree g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1266 | by (simp add: fps_mult_subdegree_ge fls_regpart_subdegree_conv[symmetric]) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1267 | with 1 assms show ?thesis by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1268 | qed (simp add: 1) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1269 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1270 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1271 | lemma fls_base_factor_to_fps_mult_conv_unit_factor: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1272 |   fixes f g :: "'a::{comm_monoid_add,mult_zero} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1273 | shows | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1274 | "fls_base_factor_to_fps (f * g) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1275 | unit_factor (fls_base_factor_to_fps f * fls_base_factor_to_fps g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1276 | using fls_base_factor_mult_both_base_factor[of f g] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1277 | fps_unit_factor_fls_regpart[of "fls_base_factor f * fls_base_factor g"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1278 | fls_base_factor_subdegree[of f] fls_base_factor_subdegree[of g] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1279 | fls_mult_subdegree_ge_0[of "fls_base_factor f" "fls_base_factor g"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1280 | fls_times_conv_regpart[of "fls_base_factor f" "fls_base_factor g"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1281 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1282 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1283 | lemma fls_base_factor_to_fps_mult': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1284 |   fixes   f g :: "'a::{comm_monoid_add,mult_zero} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1285 | assumes "(f $$ fls_subdegree f) * (g $$ fls_subdegree g) \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1286 | shows "fls_base_factor_to_fps (f * g) = fls_base_factor_to_fps f * fls_base_factor_to_fps g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1287 | using assms fls_mult_nonzero_base_subdegree_eq[of f g] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1288 | fls_times_base_factor_conv_shifted_times[of f g] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1289 | fls_times_conv_regpart[of "fls_base_factor f" "fls_base_factor g"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1290 | fls_base_factor_subdegree[of f] fls_base_factor_subdegree[of g] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1291 | by fastforce | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1292 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1293 | lemma fls_base_factor_to_fps_mult: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1294 | fixes f g :: "'a::semiring_no_zero_divisors fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1295 | shows "fls_base_factor_to_fps (f * g) = fls_base_factor_to_fps f * fls_base_factor_to_fps g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1296 | using fls_base_factor_to_fps_mult'[of f g] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1297 | by (cases "f=0 \<or> g=0") auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1298 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1299 | lemma fls_times_conv_fps_times: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1300 |   fixes   f g :: "'a::{comm_monoid_add,mult_zero} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1301 | assumes "fls_subdegree f \<ge> 0" "fls_subdegree g \<ge> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1302 | shows "f * g = fps_to_fls (fls_regpart f * fls_regpart g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1303 | using assms fls_mult_subdegree_ge[of f g] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1304 | by (cases "f * g = 0") (simp_all add: fls_times_conv_regpart[symmetric]) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1305 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1306 | lemma fps_times_conv_fls_times: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1307 |   fixes   f g :: "'a::{comm_monoid_add,mult_zero} fps"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1308 | shows "f * g = fls_regpart (fps_to_fls f * fps_to_fls g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1309 | using fls_subdegree_fls_to_fps_gt0 fls_times_conv_regpart[symmetric] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1310 | by fastforce | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1311 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1312 | lemma fls_times_fps_to_fls: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1313 |   fixes f g :: "'a::{comm_monoid_add,mult_zero} fps"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1314 | shows "fps_to_fls (f * g) = fps_to_fls f * fps_to_fls g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1315 | proof (intro fls_eq_conv_fps_eqI, rule fls_subdegree_fls_to_fps_gt0) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1316 | show "fls_subdegree (fps_to_fls f * fps_to_fls g) \<ge> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1317 | proof (cases "fps_to_fls f * fps_to_fls g = 0") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1318 | case False thus ?thesis | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1319 | using fls_mult_subdegree_ge fls_subdegree_fls_to_fps_gt0[of f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1320 | fls_subdegree_fls_to_fps_gt0[of g] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1321 | by fastforce | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1322 | qed simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1323 | qed (simp add: fps_times_conv_fls_times) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1324 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1325 | lemma fls_X_times_conv_shift: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1326 |   fixes f :: "'a::{comm_monoid_add,mult_zero,monoid_mult} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1327 | shows "fls_X * f = fls_shift (-1) f" "f * fls_X = fls_shift (-1) f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1328 | by (simp_all add: fls_X_conv_shift_1 fls_mult_one fls_shifted_times_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1329 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1330 | lemmas fls_X_times_comm = trans_sym[OF fls_X_times_conv_shift] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1331 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1332 | lemma fls_subdegree_mult_fls_X: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1333 |   fixes   f :: "'a::{comm_monoid_add,mult_zero,monoid_mult} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1334 | assumes "f \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1335 | shows "fls_subdegree (fls_X * f) = fls_subdegree f + 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1336 | and "fls_subdegree (f * fls_X) = fls_subdegree f + 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1337 | by (auto simp: fls_X_times_conv_shift assms) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1338 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1339 | lemma fls_mult_fls_X_nonzero: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1340 |   fixes   f :: "'a::{comm_monoid_add,mult_zero,monoid_mult} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1341 | assumes "f \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1342 | shows "fls_X * f \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1343 | and "f * fls_X \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1344 | by (auto simp: fls_X_times_conv_shift fls_shift_eq0_iff assms) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1345 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1346 | lemma fls_base_factor_mult_fls_X: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1347 |   fixes f :: "'a::{comm_monoid_add,monoid_mult,mult_zero} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1348 | shows "fls_base_factor (fls_X * f) = fls_base_factor f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1349 | and "fls_base_factor (f * fls_X) = fls_base_factor f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1350 | using fls_base_factor_shift[of "-1" f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1351 | by (auto simp: fls_X_times_conv_shift) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1352 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1353 | lemma fls_X_inv_times_conv_shift: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1354 |   fixes f :: "'a::{comm_monoid_add,mult_zero,monoid_mult} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1355 | shows "fls_X_inv * f = fls_shift 1 f" "f * fls_X_inv = fls_shift 1 f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1356 | by (simp_all add: fls_X_inv_conv_shift_1 fls_mult_one fls_shifted_times_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1357 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1358 | lemmas fls_X_inv_times_comm = trans_sym[OF fls_X_inv_times_conv_shift] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1359 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1360 | lemma fls_subdegree_mult_fls_X_inv: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1361 |   fixes   f :: "'a::{comm_monoid_add,mult_zero,monoid_mult} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1362 | assumes "f \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1363 | shows "fls_subdegree (fls_X_inv * f) = fls_subdegree f - 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1364 | and "fls_subdegree (f * fls_X_inv) = fls_subdegree f - 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1365 | by (auto simp: fls_X_inv_times_conv_shift assms) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1366 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1367 | lemma fls_mult_fls_X_inv_nonzero: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1368 |   fixes   f :: "'a::{comm_monoid_add,mult_zero,monoid_mult} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1369 | assumes "f \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1370 | shows "fls_X_inv * f \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1371 | and "f * fls_X_inv \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1372 | by (auto simp: fls_X_inv_times_conv_shift fls_shift_eq0_iff assms) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1373 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1374 | lemma fls_base_factor_mult_fls_X_inv: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1375 |   fixes f :: "'a::{comm_monoid_add,monoid_mult,mult_zero} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1376 | shows "fls_base_factor (fls_X_inv * f) = fls_base_factor f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1377 | and "fls_base_factor (f * fls_X_inv) = fls_base_factor f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1378 | using fls_base_factor_shift[of 1 f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1379 | by (auto simp: fls_X_inv_times_conv_shift) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1380 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1381 | lemma fls_mult_assoc_subdegree_ge_0: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1382 | fixes f g h :: "'a::semiring_0 fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1383 | assumes "fls_subdegree f \<ge> 0" "fls_subdegree g \<ge> 0" "fls_subdegree h \<ge> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1384 | shows "f * g * h = f * (g * h)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1385 | using assms | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1386 | by (simp add: fls_times_conv_fps_times fls_subdegree_fls_to_fps_gt0 mult.assoc) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1387 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1388 | lemma fls_mult_assoc_base_factor: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1389 | fixes a b c :: "'a::semiring_0 fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1390 | shows | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1391 | "fls_base_factor a * fls_base_factor b * fls_base_factor c = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1392 | fls_base_factor a * (fls_base_factor b * fls_base_factor c)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1393 | by (simp add: fls_mult_assoc_subdegree_ge_0 del: fls_base_factor_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1394 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1395 | lemma fls_mult_distrib_subdegree_ge_0: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1396 | fixes f g h :: "'a::semiring_0 fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1397 | assumes "fls_subdegree f \<ge> 0" "fls_subdegree g \<ge> 0" "fls_subdegree h \<ge> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1398 | shows "(f + g) * h = f * h + g * h" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1399 | and "h * (f + g) = h * f + h * g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1400 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1401 | have "fls_subdegree (f+g) \<ge> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1402 | proof (cases "f+g = 0") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1403 | case False | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1404 | with assms(1,2) show ?thesis | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1405 | using fls_plus_subdegree by fastforce | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1406 | qed simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1407 | with assms show "(f + g) * h = f * h + g * h" "h * (f + g) = h * f + h * g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1408 | using distrib_right[of "fls_regpart f"] distrib_left[of "fls_regpart h"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1409 | by (simp_all add: fls_times_conv_fps_times) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1410 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1411 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1412 | lemma fls_mult_distrib_base_factor: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1413 | fixes a b c :: "'a::semiring_0 fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1414 | shows | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1415 | "fls_base_factor a * (fls_base_factor b + fls_base_factor c) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1416 | fls_base_factor a * fls_base_factor b + fls_base_factor a * fls_base_factor c" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1417 | by (simp add: fls_mult_distrib_subdegree_ge_0 del: fls_base_factor_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1418 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1419 | instance fls :: (semiring_0) semiring_0 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1420 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1421 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1422 | fix a b c :: "'a fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1423 | have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1424 | "a * b * c = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1425 | fls_shift (- (fls_subdegree a + fls_subdegree b + fls_subdegree c)) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1426 | (fls_base_factor a * fls_base_factor b * fls_base_factor c)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1427 | by (simp add: fls_times_both_shifted_simp) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1428 | moreover have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1429 | "a * (b * c) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1430 | fls_shift (- (fls_subdegree a + fls_subdegree b + fls_subdegree c)) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1431 | (fls_base_factor a * fls_base_factor b * fls_base_factor c)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1432 | using fls_mult_assoc_base_factor[of a b c] by (simp add: fls_times_both_shifted_simp) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1433 | ultimately show "a * b * c = a * (b * c)" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1434 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1435 | have ab: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1436 | "fls_subdegree (fls_shift (min (fls_subdegree a) (fls_subdegree b)) a) \<ge> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1437 | "fls_subdegree (fls_shift (min (fls_subdegree a) (fls_subdegree b)) b) \<ge> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1438 | by (simp_all add: fls_shift_nonneg_subdegree) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1439 | have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1440 | "(a + b) * c = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1441 | fls_shift (- (min (fls_subdegree a) (fls_subdegree b) + fls_subdegree c)) ( | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1442 | ( | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1443 | fls_shift (min (fls_subdegree a) (fls_subdegree b)) a + | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1444 | fls_shift (min (fls_subdegree a) (fls_subdegree b)) b | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1445 | ) * fls_base_factor c)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1446 | using fls_times_both_shifted_simp[of | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1447 | "-min (fls_subdegree a) (fls_subdegree b)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1448 | "fls_shift (min (fls_subdegree a) (fls_subdegree b)) a + | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1449 | fls_shift (min (fls_subdegree a) (fls_subdegree b)) b" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1450 | "-fls_subdegree c" "fls_base_factor c" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1451 | ] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1452 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1453 | also have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1454 | "\<dots> = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1455 | fls_shift (-(min (fls_subdegree a) (fls_subdegree b) + fls_subdegree c)) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1456 | (fls_shift (min (fls_subdegree a) (fls_subdegree b)) a * fls_base_factor c) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1457 | + | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1458 | fls_shift (-(min (fls_subdegree a) (fls_subdegree b) + fls_subdegree c)) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1459 | (fls_shift (min (fls_subdegree a) (fls_subdegree b)) b * fls_base_factor c)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1460 | using ab | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1461 | by (simp add: fls_mult_distrib_subdegree_ge_0(1) del: fls_base_factor_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1462 | finally show "(a + b) * c = a * c + b * c" by (simp add: fls_times_both_shifted_simp) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1463 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1464 | have bc: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1465 | "fls_subdegree (fls_shift (min (fls_subdegree b) (fls_subdegree c)) b) \<ge> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1466 | "fls_subdegree (fls_shift (min (fls_subdegree b) (fls_subdegree c)) c) \<ge> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1467 | by (simp_all add: fls_shift_nonneg_subdegree) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1468 | have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1469 | "a * (b + c) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1470 | fls_shift (- (fls_subdegree a + min (fls_subdegree b) (fls_subdegree c))) ( | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1471 | fls_base_factor a * ( | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1472 | fls_shift (min (fls_subdegree b) (fls_subdegree c)) b + | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1473 | fls_shift (min (fls_subdegree b) (fls_subdegree c)) c | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1474 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1475 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1476 | " | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1477 | using fls_times_both_shifted_simp[of | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1478 | "-fls_subdegree a" "fls_base_factor a" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1479 | "-min (fls_subdegree b) (fls_subdegree c)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1480 | "fls_shift (min (fls_subdegree b) (fls_subdegree c)) b + | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1481 | fls_shift (min (fls_subdegree b) (fls_subdegree c)) c" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1482 | ] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1483 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1484 | also have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1485 | "\<dots> = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1486 | fls_shift (-(fls_subdegree a + min (fls_subdegree b) (fls_subdegree c))) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1487 | (fls_base_factor a * fls_shift (min (fls_subdegree b) (fls_subdegree c)) b) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1488 | + | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1489 | fls_shift (-(fls_subdegree a + min (fls_subdegree b) (fls_subdegree c))) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1490 | (fls_base_factor a * fls_shift (min (fls_subdegree b) (fls_subdegree c)) c) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1491 | " | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1492 | using bc | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1493 | by (simp add: fls_mult_distrib_subdegree_ge_0(2) del: fls_base_factor_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1494 | finally show "a * (b + c) = a * b + a * c" by (simp add: fls_times_both_shifted_simp) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1495 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1496 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1497 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1498 | lemma fls_mult_commute_subdegree_ge_0: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1499 | fixes f g :: "'a::comm_semiring_0 fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1500 | assumes "fls_subdegree f \<ge> 0" "fls_subdegree g \<ge> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1501 | shows "f * g = g * f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1502 | using assms | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1503 | by (simp add: fls_times_conv_fps_times mult.commute) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1504 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1505 | lemma fls_mult_commute_base_factor: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1506 | fixes a b c :: "'a::comm_semiring_0 fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1507 | shows "fls_base_factor a * fls_base_factor b = fls_base_factor b * fls_base_factor a" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1508 | by (simp add: fls_mult_commute_subdegree_ge_0 del: fls_base_factor_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1509 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1510 | instance fls :: (comm_semiring_0) comm_semiring_0 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1511 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1512 | fix a b c :: "'a fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1513 | show "a * b = b * a" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1514 | using fls_times_conv_base_factor_times[of a b] fls_times_conv_base_factor_times[of b a] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1515 | fls_mult_commute_base_factor[of a b] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1516 | by (simp add: add.commute) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1517 | qed (simp add: distrib_right) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1518 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1519 | instance fls :: (semiring_1) semiring_1 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1520 | by (standard, simp_all add: fls_mult_one) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1521 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1522 | lemma fls_of_nat: "(of_nat n :: 'a::semiring_1 fls) = fls_const (of_nat n)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1523 | by (induct n) (auto intro: fls_eqI) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1524 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1525 | lemma fls_of_nat_nth: "of_nat n $$ k = (if k=0 then of_nat n else 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1526 | by (simp add: fls_of_nat) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1527 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1528 | lemma fls_mult_of_nat_nth [simp]: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1529 | shows "(of_nat k * f) $$ n = of_nat k * f$$n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1530 | and "(f * of_nat k ) $$ n = f$$n * of_nat k" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1531 | by (simp_all add: fls_of_nat) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1532 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1533 | lemma fls_subdegree_of_nat [simp]: "fls_subdegree (of_nat n) = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1534 | by (simp add: fls_of_nat) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1535 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1536 | lemma fls_shift_of_nat_nth: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1537 | "fls_shift k (of_nat a) $$ n = (if n=-k then of_nat a else 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1538 | by (simp add: fls_of_nat fls_shift_const_nth) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1539 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1540 | lemma fls_base_factor_of_nat [simp]: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1541 | "fls_base_factor (of_nat n :: 'a::semiring_1 fls) = (of_nat n :: 'a fls)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1542 | by (simp add: fls_of_nat) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1543 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1544 | lemma fls_regpart_of_nat [simp]: "fls_regpart (of_nat n) = (of_nat n :: 'a::semiring_1 fps)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1545 | by (simp add: fls_of_nat fps_of_nat) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1546 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1547 | lemma fls_prpart_of_nat [simp]: "fls_prpart (of_nat n) = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1548 | by (simp add: fls_prpart_eq0_iff) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1549 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1550 | lemma fls_base_factor_to_fps_of_nat: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1551 | "fls_base_factor_to_fps (of_nat n) = (of_nat n :: 'a::semiring_1 fps)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1552 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1553 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1554 | lemma fps_to_fls_of_nat: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1555 | "fps_to_fls (of_nat n) = (of_nat n :: 'a::semiring_1 fls)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1556 | proof - | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1557 | have "fps_to_fls (of_nat n) = fps_to_fls (fps_const (of_nat n))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1558 | by (simp add: fps_of_nat) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1559 | thus ?thesis by (simp add: fls_of_nat) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1560 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1561 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1562 | instance fls :: (comm_semiring_1) comm_semiring_1 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1563 | by standard simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1564 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1565 | instance fls :: (ring) ring .. | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1566 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1567 | instance fls :: (comm_ring) comm_ring .. | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1568 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1569 | instance fls :: (ring_1) ring_1 .. | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1570 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1571 | lemma fls_of_int_nonneg: "(of_int (int n) :: 'a::ring_1 fls) = fls_const (of_int (int n))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1572 | by (induct n) (auto intro: fls_eqI) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1573 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1574 | lemma fls_of_int: "(of_int i :: 'a::ring_1 fls) = fls_const (of_int i)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1575 | proof (induct i) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1576 | case (neg i) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1577 | have "of_int (int (Suc i)) = fls_const (of_int (int (Suc i)) :: 'a)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1578 | using fls_of_int_nonneg[of "Suc i"] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1579 | hence "- of_int (int (Suc i)) = - fls_const (of_int (int (Suc i)) :: 'a)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1580 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1581 | thus ?case by (simp add: fls_const_uminus[symmetric]) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1582 | qed (rule fls_of_int_nonneg) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1583 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1584 | lemma fls_of_int_nth: "of_int n $$ k = (if k=0 then of_int n else 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1585 | by (simp add: fls_of_int) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1586 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1587 | lemma fls_mult_of_int_nth [simp]: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1588 | shows "(of_int k * f) $$ n = of_int k * f$$n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1589 | and "(f * of_int k ) $$ n = f$$n * of_int k" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1590 | by (simp_all add: fls_of_int) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1591 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1592 | lemma fls_subdegree_of_int [simp]: "fls_subdegree (of_int i) = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1593 | by (simp add: fls_of_int) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1594 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1595 | lemma fls_shift_of_int_nth: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1596 | "fls_shift k (of_int i) $$ n = (if n=-k then of_int i else 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1597 | by (simp add: fls_of_int_nth) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1598 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1599 | lemma fls_base_factor_of_int [simp]: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1600 | "fls_base_factor (of_int i :: 'a::ring_1 fls) = (of_int i :: 'a fls)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1601 | by (simp add: fls_of_int) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1602 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1603 | lemma fls_regpart_of_int [simp]: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1604 | "fls_regpart (of_int i) = (of_int i :: 'a::ring_1 fps)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1605 | by (simp add: fls_of_int fps_of_int) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1606 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1607 | lemma fls_prpart_of_int [simp]: "fls_prpart (of_int n) = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1608 | by (simp add: fls_prpart_eq0_iff) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1609 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1610 | lemma fls_base_factor_to_fps_of_int: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1611 | "fls_base_factor_to_fps (of_int i) = (of_int i :: 'a::ring_1 fps)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1612 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1613 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1614 | lemma fps_to_fls_of_int: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1615 | "fps_to_fls (of_int i) = (of_int i :: 'a::ring_1 fls)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1616 | proof - | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1617 | have "fps_to_fls (of_int i) = fps_to_fls (fps_const (of_int i))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1618 | by (simp add: fps_of_int) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1619 | thus ?thesis by (simp add: fls_of_int) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1620 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1621 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1622 | instance fls :: (comm_ring_1) comm_ring_1 .. | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1623 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1624 | instance fls :: (semiring_no_zero_divisors) semiring_no_zero_divisors | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1625 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1626 | fix a b :: "'a fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1627 | assume "a \<noteq> 0" and "b \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1628 | hence "(a * b) $$ (fls_subdegree a + fls_subdegree b) \<noteq> 0" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1629 | thus "a * b \<noteq> 0" using fls_nonzeroI by fast | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1630 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1631 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1632 | instance fls :: (semiring_1_no_zero_divisors) semiring_1_no_zero_divisors .. | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1633 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1634 | instance fls :: (ring_no_zero_divisors) ring_no_zero_divisors .. | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1635 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1636 | instance fls :: (ring_1_no_zero_divisors) ring_1_no_zero_divisors .. | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1637 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1638 | instance fls :: (idom) idom .. | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1639 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1640 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1641 | subsubsection \<open>Powers\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1642 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1643 | lemma fls_pow_subdegree_ge: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1644 | "f^n \<noteq> 0 \<Longrightarrow> fls_subdegree (f^n) \<ge> n * fls_subdegree f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1645 | proof (induct n) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1646 | case (Suc n) thus ?case | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1647 | using fls_mult_subdegree_ge[of f "f^n"] by (fastforce simp: algebra_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1648 | qed simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1649 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1650 | lemma fls_pow_nth_below_subdegree: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1651 | "k < n * fls_subdegree f \<Longrightarrow> (f^n) $$ k = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1652 | using fls_pow_subdegree_ge[of f n] by (cases "f^n = 0") auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1653 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1654 | lemma fls_pow_base [simp]: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1655 | "(f ^ n) $$ (n * fls_subdegree f) = (f $$ fls_subdegree f) ^ n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1656 | proof (induct n) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1657 | case (Suc n) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1658 | show ?case | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1659 | proof (cases "Suc n * fls_subdegree f < fls_subdegree f + fls_subdegree (f^n)") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1660 | case True with Suc show ?thesis | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1661 | by (simp_all add: fls_times_nth_eq0 distrib_right) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1662 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1663 | case False | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1664 | from False have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1665 |       "{0..int n * fls_subdegree f - fls_subdegree (f ^ n)} =
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1666 |         insert 0 {1..int n * fls_subdegree f - fls_subdegree (f ^ n)}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1667 | by (auto simp: algebra_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1668 | with False Suc show ?thesis | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1669 | by (simp add: algebra_simps fls_times_nth(4) fls_pow_nth_below_subdegree) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1670 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1671 | qed simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1672 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1673 | lemma fls_pow_subdegree_eqI: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1674 | "(f $$ fls_subdegree f) ^ n \<noteq> 0 \<Longrightarrow> fls_subdegree (f^n) = n * fls_subdegree f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1675 | using fls_pow_nth_below_subdegree by (fastforce intro: fls_subdegree_eqI) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1676 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1677 | lemma fls_unit_base_subdegree_power: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1678 | "x * f $$ fls_subdegree f = 1 \<Longrightarrow> fls_subdegree (f ^ n) = n * fls_subdegree f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1679 | "f $$ fls_subdegree f * y = 1 \<Longrightarrow> fls_subdegree (f ^ n) = n * fls_subdegree f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1680 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1681 | show "x * f $$ fls_subdegree f = 1 \<Longrightarrow> fls_subdegree (f ^ n) = n * fls_subdegree f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1682 | using left_right_inverse_power[of x "f $$ fls_subdegree f" n] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1683 | by (auto intro: fls_pow_subdegree_eqI) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1684 | show "f $$ fls_subdegree f * y = 1 \<Longrightarrow> fls_subdegree (f ^ n) = n * fls_subdegree f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1685 | using left_right_inverse_power[of "f $$ fls_subdegree f" y n] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1686 | by (auto intro: fls_pow_subdegree_eqI) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1687 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1688 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1689 | lemma fls_base_dvd1_subdegree_power: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1690 | "f $$ fls_subdegree f dvd 1 \<Longrightarrow> fls_subdegree (f ^ n) = n * fls_subdegree f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1691 | using fls_unit_base_subdegree_power unfolding dvd_def by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1692 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1693 | lemma fls_pow_subdegree_ge0: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1694 | assumes "fls_subdegree f \<ge> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1695 | shows "fls_subdegree (f^n) \<ge> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1696 | proof (cases "f^n = 0") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1697 | case False | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1698 | moreover from assms have "int n * fls_subdegree f \<ge> 0" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1699 | ultimately show ?thesis using fls_pow_subdegree_ge by fastforce | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1700 | qed simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1701 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1702 | lemma fls_subdegree_pow: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1703 | fixes f :: "'a::semiring_1_no_zero_divisors fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1704 | shows "fls_subdegree (f ^ n) = n * fls_subdegree f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1705 | proof (cases "f=0") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1706 | case False thus ?thesis by (induct n) (simp_all add: algebra_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1707 | qed (cases "n=0", auto simp: zero_power) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1708 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1709 | lemma fls_shifted_pow: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1710 | "(fls_shift m f) ^ n = fls_shift (n*m) (f ^ n)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1711 | by (induct n) (simp_all add: fls_times_both_shifted_simp algebra_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1712 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1713 | lemma fls_pow_conv_fps_pow: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1714 | assumes "fls_subdegree f \<ge> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1715 | shows "f ^ n = fps_to_fls ( (fls_regpart f) ^ n )" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1716 | proof (induct n) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1717 | case (Suc n) with assms show ?case | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1718 | using fls_pow_subdegree_ge0[of f n] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1719 | by (simp add: fls_times_conv_fps_times) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1720 | qed simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1721 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1722 | lemma fls_pow_conv_regpart: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1723 | "fls_subdegree f \<ge> 0 \<Longrightarrow> fls_regpart (f ^ n) = (fls_regpart f) ^ n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1724 | using fls_pow_subdegree_ge0[of f n] fls_pow_conv_fps_pow[of f n] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1725 | by (intro fps_to_fls_eq_imp_fps_eq) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1726 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1727 | text \<open>These two lemmas show that shifting 1 is equivalent to powers of the implied variable.\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1728 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1729 | lemma fls_X_power_conv_shift_1: "fls_X ^ n = fls_shift (-n) 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1730 | by (simp add: fls_X_conv_shift_1 fls_shifted_pow) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1731 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1732 | lemma fls_X_inv_power_conv_shift_1: "fls_X_inv ^ n = fls_shift n 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1733 | by (simp add: fls_X_inv_conv_shift_1 fls_shifted_pow) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1734 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1735 | abbreviation "fls_X_intpow \<equiv> (\<lambda>i. fls_shift (-i) 1)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1736 | \<comment> \<open> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1737 |   Unifies @{term fls_X} and @{term fls_X_inv} so that @{term "fls_X_intpow"} returns the equivalent
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1738 |   of the implied variable raised to the supplied integer argument of @{term "fls_X_intpow"}, whether
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1739 | positive or negative. | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1740 | \<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1741 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1742 | lemma fls_X_intpow_nonzero[simp]: "(fls_X_intpow i :: 'a::zero_neq_one fls) \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1743 | by (simp add: fls_shift_eq0_iff) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1744 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1745 | lemma fls_X_intpow_power: "(fls_X_intpow i) ^ n = fls_X_intpow (n * i)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1746 | by (simp add: fls_shifted_pow) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1747 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1748 | lemma fls_X_power_nth [simp]: "fls_X ^ n $$ k = (if k=n then 1 else 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1749 | by (simp add: fls_X_power_conv_shift_1) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1750 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1751 | lemma fls_X_inv_power_nth [simp]: "fls_X_inv ^ n $$ k = (if k=-n then 1 else 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1752 | by (simp add: fls_X_inv_power_conv_shift_1) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1753 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1754 | lemma fls_X_pow_nonzero[simp]: "(fls_X ^ n :: 'a :: semiring_1 fls) \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1755 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1756 | assume "(fls_X ^ n :: 'a fls) = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1757 | hence "(fls_X ^ n :: 'a fls) $$ n = 0" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1758 | thus False by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1759 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1760 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1761 | lemma fls_X_inv_pow_nonzero[simp]: "(fls_X_inv ^ n :: 'a :: semiring_1 fls) \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1762 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1763 | assume "(fls_X_inv ^ n :: 'a fls) = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1764 | hence "(fls_X_inv ^ n :: 'a fls) $$ -n = 0" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1765 | thus False by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1766 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1767 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1768 | lemma fls_subdegree_fls_X_pow [simp]: "fls_subdegree (fls_X ^ n) = n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1769 | by (intro fls_subdegree_eqI) (simp_all add: fls_X_power_conv_shift_1) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1770 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1771 | lemma fls_subdegree_fls_X_inv_pow [simp]: "fls_subdegree (fls_X_inv ^ n) = -n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1772 | by (intro fls_subdegree_eqI) (simp_all add: fls_X_inv_power_conv_shift_1) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1773 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1774 | lemma fls_subdegree_fls_X_intpow [simp]: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1775 | "fls_subdegree ((fls_X_intpow i) :: 'a::zero_neq_one fls) = i" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1776 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1777 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1778 | lemma fls_X_pow_conv_fps_X_pow: "fls_regpart (fls_X ^ n) = fps_X ^ n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1779 | by (simp add: fls_pow_conv_regpart) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1780 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1781 | lemma fls_X_inv_pow_regpart: "n > 0 \<Longrightarrow> fls_regpart (fls_X_inv ^ n) = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1782 | by (auto intro: fps_ext simp: fls_X_inv_power_conv_shift_1) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1783 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1784 | lemma fls_X_intpow_regpart: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1785 | "fls_regpart (fls_X_intpow i) = (if i\<ge>0 then fps_X ^ nat i else 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1786 | using fls_X_pow_conv_fps_X_pow[of "nat i"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1787 | fls_regpart_shift_conv_fps_shift[of "-i" 1] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1788 | by (auto simp: fls_X_power_conv_shift_1 fps_shift_one) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1789 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1790 | lemma fls_X_power_times_conv_shift: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1791 | "fls_X ^ n * f = fls_shift (-int n) f" "f * fls_X ^ n = fls_shift (-int n) f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1792 | using fls_times_both_shifted_simp[of "-int n" 1 0 f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1793 | fls_times_both_shifted_simp[of 0 f "-int n" 1] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1794 | by (simp_all add: fls_X_power_conv_shift_1) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1795 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1796 | lemma fls_X_inv_power_times_conv_shift: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1797 | "fls_X_inv ^ n * f = fls_shift (int n) f" "f * fls_X_inv ^ n = fls_shift (int n) f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1798 | using fls_times_both_shifted_simp[of "int n" 1 0 f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1799 | fls_times_both_shifted_simp[of 0 f "int n" 1] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1800 | by (simp_all add: fls_X_inv_power_conv_shift_1) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1801 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1802 | lemma fls_X_intpow_times_conv_shift: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1803 | fixes f :: "'a::semiring_1 fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1804 | shows "fls_X_intpow i * f = fls_shift (-i) f" "f * fls_X_intpow i = fls_shift (-i) f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1805 | by (simp_all add: fls_shifted_times_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1806 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1807 | lemmas fls_X_power_times_comm = trans_sym[OF fls_X_power_times_conv_shift] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1808 | lemmas fls_X_inv_power_times_comm = trans_sym[OF fls_X_inv_power_times_conv_shift] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1809 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1810 | lemma fls_X_intpow_times_comm: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1811 | fixes f :: "'a::semiring_1 fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1812 | shows "fls_X_intpow i * f = f * fls_X_intpow i" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1813 | by (simp add: fls_X_intpow_times_conv_shift) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1814 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1815 | lemma fls_X_intpow_times_fls_X_intpow: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1816 | "(fls_X_intpow i :: 'a::semiring_1 fls) * fls_X_intpow j = fls_X_intpow (i+j)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1817 | by (simp add: fls_times_both_shifted_simp) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1818 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1819 | lemma fls_X_intpow_diff_conv_times: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1820 | "fls_X_intpow (i-j) = (fls_X_intpow i :: 'a::semiring_1 fls) * fls_X_intpow (-j)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1821 | using fls_X_intpow_times_fls_X_intpow[of i "-j",symmetric] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1822 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1823 | lemma fls_mult_fls_X_power_nonzero: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1824 | assumes "f \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1825 | shows "fls_X ^ n * f \<noteq> 0" "f * fls_X ^ n \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1826 | by (auto simp: fls_X_power_times_conv_shift fls_shift_eq0_iff assms) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1827 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1828 | lemma fls_mult_fls_X_inv_power_nonzero: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1829 | assumes "f \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1830 | shows "fls_X_inv ^ n * f \<noteq> 0" "f * fls_X_inv ^ n \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1831 | by (auto simp: fls_X_inv_power_times_conv_shift fls_shift_eq0_iff assms) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1832 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1833 | lemma fls_mult_fls_X_intpow_nonzero: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1834 | fixes f :: "'a::semiring_1 fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1835 | assumes "f \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1836 | shows "fls_X_intpow i * f \<noteq> 0" "f * fls_X_intpow i \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1837 | by (auto simp: fls_X_intpow_times_conv_shift fls_shift_eq0_iff assms) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1838 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1839 | lemma fls_subdegree_mult_fls_X_power: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1840 | assumes "f \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1841 | shows "fls_subdegree (fls_X ^ n * f) = fls_subdegree f + n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1842 | and "fls_subdegree (f * fls_X ^ n) = fls_subdegree f + n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1843 | by (auto simp: fls_X_power_times_conv_shift assms) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1844 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1845 | lemma fls_subdegree_mult_fls_X_inv_power: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1846 | assumes "f \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1847 | shows "fls_subdegree (fls_X_inv ^ n * f) = fls_subdegree f - n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1848 | and "fls_subdegree (f * fls_X_inv ^ n) = fls_subdegree f - n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1849 | by (auto simp: fls_X_inv_power_times_conv_shift assms) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1850 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1851 | lemma fls_subdegree_mult_fls_X_intpow: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1852 | fixes f :: "'a::semiring_1 fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1853 | assumes "f \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1854 | shows "fls_subdegree (fls_X_intpow i * f) = fls_subdegree f + i" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1855 | and "fls_subdegree (f * fls_X_intpow i) = fls_subdegree f + i" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1856 | by (auto simp: fls_X_intpow_times_conv_shift assms) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1857 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1858 | lemma fls_X_shift: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1859 | "fls_shift (-int n) fls_X = fls_X ^ Suc n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1860 | "fls_shift (int (Suc n)) fls_X = fls_X_inv ^ n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1861 | using fls_X_power_conv_shift_1[of "Suc n", symmetric] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1862 | by (simp_all add: fls_X_conv_shift_1 fls_X_inv_power_conv_shift_1) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1863 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1864 | lemma fls_X_inv_shift: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1865 | "fls_shift (int n) fls_X_inv = fls_X_inv ^ Suc n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1866 | "fls_shift (- int (Suc n)) fls_X_inv = fls_X ^ n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1867 | using fls_X_inv_power_conv_shift_1[of "Suc n", symmetric] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1868 | by (simp_all add: fls_X_inv_conv_shift_1 fls_X_power_conv_shift_1) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1869 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1870 | lemma fls_X_power_base_factor: "fls_base_factor (fls_X ^ n) = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1871 | by (simp add: fls_X_power_conv_shift_1) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1872 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1873 | lemma fls_X_inv_power_base_factor: "fls_base_factor (fls_X_inv ^ n) = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1874 | by (simp add: fls_X_inv_power_conv_shift_1) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1875 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1876 | lemma fls_X_intpow_base_factor: "fls_base_factor (fls_X_intpow i) = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1877 | using fls_base_factor_shift[of "-i" 1] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1878 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1879 | lemma fls_base_factor_mult_fls_X_power: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1880 | shows "fls_base_factor (fls_X ^ n * f) = fls_base_factor f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1881 | and "fls_base_factor (f * fls_X ^ n) = fls_base_factor f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1882 | using fls_base_factor_shift[of "-int n" f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1883 | by (auto simp: fls_X_power_times_conv_shift) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1884 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1885 | lemma fls_base_factor_mult_fls_X_inv_power: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1886 | shows "fls_base_factor (fls_X_inv ^ n * f) = fls_base_factor f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1887 | and "fls_base_factor (f * fls_X_inv ^ n) = fls_base_factor f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1888 | using fls_base_factor_shift[of "int n" f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1889 | by (auto simp: fls_X_inv_power_times_conv_shift) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1890 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1891 | lemma fls_base_factor_mult_fls_X_intpow: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1892 | fixes f :: "'a::semiring_1 fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1893 | shows "fls_base_factor (fls_X_intpow i * f) = fls_base_factor f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1894 | and "fls_base_factor (f * fls_X_intpow i) = fls_base_factor f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1895 | using fls_base_factor_shift[of "-i" f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1896 | by (auto simp: fls_X_intpow_times_conv_shift) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1897 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1898 | lemma fls_X_power_base_factor_to_fps: "fls_base_factor_to_fps (fls_X ^ n) = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1899 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1900 | define X where "X \<equiv> fls_X :: 'a::semiring_1 fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1901 | hence "fls_base_factor (X ^ n) = 1" using fls_X_power_base_factor by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1902 | thus "fls_base_factor_to_fps (X^n) = 1" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1903 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1904 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1905 | lemma fls_X_inv_power_base_factor_to_fps: "fls_base_factor_to_fps (fls_X_inv ^ n) = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1906 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1907 | define iX where "iX \<equiv> fls_X_inv :: 'a::semiring_1 fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1908 | hence "fls_base_factor (iX ^ n) = 1" using fls_X_inv_power_base_factor by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1909 | thus "fls_base_factor_to_fps (iX^n) = 1" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1910 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1911 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1912 | lemma fls_X_intpow_base_factor_to_fps: "fls_base_factor_to_fps (fls_X_intpow i) = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1913 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1914 | define f :: "'a fls" where "f \<equiv> fls_X_intpow i" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1915 | moreover have "fls_base_factor (fls_X_intpow i) = 1" by (rule fls_X_intpow_base_factor) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1916 | ultimately have "fls_base_factor f = 1" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1917 | thus "fls_base_factor_to_fps f = 1" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1918 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1919 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1920 | lemma fls_base_factor_X_power_decompose: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1921 | fixes f :: "'a::semiring_1 fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1922 | shows "f = fls_base_factor f * fls_X_intpow (fls_subdegree f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1923 | and "f = fls_X_intpow (fls_subdegree f) * fls_base_factor f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1924 | by (simp_all add: fls_times_both_shifted_simp) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1925 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1926 | lemma fls_normalized_product_of_inverses: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1927 | assumes "f * g = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1928 | shows "fls_base_factor f * fls_base_factor g = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1929 | fls_X ^ (nat (-(fls_subdegree f+fls_subdegree g)))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1930 | and "fls_base_factor f * fls_base_factor g = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1931 | fls_X_intpow (-(fls_subdegree f+fls_subdegree g))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1932 | using fls_mult_subdegree_ge[of f g] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1933 | fls_times_base_factor_conv_shifted_times[of f g] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1934 | by (simp_all add: assms fls_X_power_conv_shift_1 algebra_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1935 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1936 | lemma fls_fps_normalized_product_of_inverses: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1937 | assumes "f * g = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1938 | shows "fls_base_factor_to_fps f * fls_base_factor_to_fps g = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1939 | fps_X ^ (nat (-(fls_subdegree f+fls_subdegree g)))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1940 | using fls_times_conv_regpart[of "fls_base_factor f" "fls_base_factor g"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1941 | fls_base_factor_subdegree[of f] fls_base_factor_subdegree[of g] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1942 | fls_normalized_product_of_inverses(1)[OF assms] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1943 | by (force simp: fls_X_pow_conv_fps_X_pow) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1944 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1945 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1946 | subsubsection \<open>Inverses\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1947 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1948 | \<comment> \<open>See lemma fls_left_inverse\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1949 | abbreviation fls_left_inverse :: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1950 |   "'a::{comm_monoid_add,uminus,times} fls \<Rightarrow> 'a \<Rightarrow> 'a fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1951 | where | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1952 | "fls_left_inverse f x \<equiv> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1953 | fls_shift (fls_subdegree f) (fps_to_fls (fps_left_inverse (fls_base_factor_to_fps f) x))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1954 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1955 | \<comment> \<open>See lemma fls_right_inverse\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1956 | abbreviation fls_right_inverse :: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1957 |   "'a::{comm_monoid_add,uminus,times} fls \<Rightarrow> 'a \<Rightarrow> 'a fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1958 | where | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1959 | "fls_right_inverse f y \<equiv> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1960 | fls_shift (fls_subdegree f) (fps_to_fls (fps_right_inverse (fls_base_factor_to_fps f) y))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1961 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1962 | instantiation fls :: ("{comm_monoid_add,uminus,times,inverse}") inverse
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1963 | begin | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1964 | definition fls_divide_def: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1965 | "f div g = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1966 | fls_shift (fls_subdegree g - fls_subdegree f) ( | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1967 | fps_to_fls ((fls_base_factor_to_fps f) div (fls_base_factor_to_fps g)) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1968 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1969 | " | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1970 | definition fls_inverse_def: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1971 | "inverse f = fls_shift (fls_subdegree f) (fps_to_fls (inverse (fls_base_factor_to_fps f)))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1972 | instance .. | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1973 | end | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1974 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1975 | lemma fls_inverse_def': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1976 | "inverse f = fls_right_inverse f (inverse (f $$ fls_subdegree f))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1977 | by (simp add: fls_inverse_def fps_inverse_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1978 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1979 | lemma fls_lr_inverse_base: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1980 | "fls_left_inverse f x $$ (-fls_subdegree f) = x" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1981 | "fls_right_inverse f y $$ (-fls_subdegree f) = y" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1982 | by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1983 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1984 | lemma fls_inverse_base: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1985 | "f \<noteq> 0 \<Longrightarrow> inverse f $$ (-fls_subdegree f) = inverse (f $$ fls_subdegree f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1986 | by (simp add: fls_inverse_def') | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1987 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1988 | lemma fls_lr_inverse_starting0: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1989 |   fixes f :: "'a::{comm_monoid_add,mult_zero,uminus} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1990 |   and   g :: "'b::{ab_group_add,mult_zero} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1991 | shows "fls_left_inverse f 0 = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1992 | and "fls_right_inverse g 0 = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1993 | by (simp_all add: fps_lr_inverse_starting0) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1994 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1995 | lemma fls_lr_inverse_eq0_imp_starting0: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1996 | "fls_left_inverse f x = 0 \<Longrightarrow> x = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1997 | "fls_right_inverse f x = 0 \<Longrightarrow> x = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1998 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1999 | assume "fls_left_inverse f x = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2000 | hence "fps_left_inverse (fls_base_factor_to_fps f) x = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2001 | using fls_shift_eq_iff fps_to_fls_eq_zero_iff by fastforce | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2002 | thus "x = 0" using fps_lr_inverse_eq0_imp_starting0(1) by fast | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2003 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2004 | assume "fls_right_inverse f x = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2005 | hence "fps_right_inverse (fls_base_factor_to_fps f) x = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2006 | using fls_shift_eq_iff fps_to_fls_eq_zero_iff by fastforce | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2007 | thus "x = 0" using fps_lr_inverse_eq0_imp_starting0(2) by fast | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2008 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2009 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2010 | lemma fls_lr_inverse_eq_0_iff: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2011 |   fixes x :: "'a::{comm_monoid_add,mult_zero,uminus}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2012 |   and   y :: "'b::{ab_group_add,mult_zero}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2013 | shows "fls_left_inverse f x = 0 \<longleftrightarrow> x = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2014 | and "fls_right_inverse g y = 0 \<longleftrightarrow> y = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2015 | using fls_lr_inverse_starting0 fls_lr_inverse_eq0_imp_starting0 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2016 | by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2017 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2018 | lemma fls_inverse_eq_0_iff': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2019 |   fixes f :: "'a::{ab_group_add,inverse,mult_zero} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2020 | shows "inverse f = 0 \<longleftrightarrow> (inverse (f $$ fls_subdegree f) = 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2021 | using fls_lr_inverse_eq_0_iff(2)[of f "inverse (f $$ fls_subdegree f)"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2022 | by (simp add: fls_inverse_def') | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2023 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2024 | lemma fls_inverse_eq_0_iff[simp]: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2025 |   "inverse f = (0:: ('a::division_ring) fls) \<longleftrightarrow> f $$ fls_subdegree f = 0"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2026 | using fls_inverse_eq_0_iff'[of f] by (cases "f=0") auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2027 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2028 | lemmas fls_inverse_eq_0' = iffD2[OF fls_inverse_eq_0_iff'] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2029 | lemmas fls_inverse_eq_0 = iffD2[OF fls_inverse_eq_0_iff] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2030 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2031 | lemma fls_lr_inverse_const: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2032 |   fixes a :: "'a::{ab_group_add,mult_zero}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2033 |   and   b :: "'b::{comm_monoid_add,mult_zero,uminus}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2034 | shows "fls_left_inverse (fls_const a) x = fls_const x" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2035 | and "fls_right_inverse (fls_const b) y = fls_const y" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2036 | by (simp_all add: fps_const_lr_inverse) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2037 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2038 | lemma fls_inverse_const: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2039 |   fixes a :: "'a::{comm_monoid_add,inverse,mult_zero,uminus}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2040 | shows "inverse (fls_const a) = fls_const (inverse a)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2041 | using fls_lr_inverse_const(2) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2042 | by (auto simp: fls_inverse_def') | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2043 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2044 | lemma fls_lr_inverse_of_nat: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2045 |   fixes x :: "'a::{ring_1,mult_zero}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2046 |   and   y :: "'b::{semiring_1,uminus}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2047 | shows "fls_left_inverse (of_nat n) x = fls_const x" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2048 | and "fls_right_inverse (of_nat n) y = fls_const y" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2049 | using fls_lr_inverse_const | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2050 | by (auto simp: fls_of_nat) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2051 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2052 | lemma fls_inverse_of_nat: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2053 |   "inverse (of_nat n :: 'a :: {semiring_1,inverse,uminus} fls) = fls_const (inverse (of_nat n))"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2054 | by (simp add: fls_inverse_const fls_of_nat) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2055 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2056 | lemma fls_lr_inverse_of_int: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2057 |   fixes x :: "'a::{ring_1,mult_zero}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2058 | shows "fls_left_inverse (of_int n) x = fls_const x" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2059 | and "fls_right_inverse (of_int n) x = fls_const x" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2060 | using fls_lr_inverse_const | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2061 | by (auto simp: fls_of_int) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2062 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2063 | lemma fls_inverse_of_int: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2064 |   "inverse (of_int n :: 'a :: {ring_1,inverse,uminus} fls) = fls_const (inverse (of_int n))"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2065 | by (simp add: fls_inverse_const fls_of_int) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2066 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2067 | lemma fls_lr_inverse_zero: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2068 |   fixes x :: "'a::{ab_group_add,mult_zero}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2069 |   and   y :: "'b::{comm_monoid_add,mult_zero,uminus}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2070 | shows "fls_left_inverse 0 x = fls_const x" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2071 | and "fls_right_inverse 0 y = fls_const y" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2072 | using fls_lr_inverse_const[of 0] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2073 | by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2074 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2075 | lemma fls_inverse_zero_conv_fls_const: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2076 |   "inverse (0::'a::{comm_monoid_add,mult_zero,uminus,inverse} fls) = fls_const (inverse 0)"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2077 | using fls_lr_inverse_zero(2)[of "inverse (0::'a)"] by (simp add: fls_inverse_def') | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2078 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2079 | lemma fls_inverse_zero': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2080 |   assumes "inverse (0::'a::{comm_monoid_add,inverse,mult_zero,uminus}) = 0"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2081 | shows "inverse (0::'a fls) = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2082 | by (simp add: fls_inverse_zero_conv_fls_const assms) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2083 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2084 | lemma fls_inverse_zero [simp]: "inverse (0::'a::division_ring fls) = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2085 | by (rule fls_inverse_zero'[OF inverse_zero]) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2086 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2087 | lemma fls_inverse_base2: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2088 |   fixes f :: "'a::{comm_monoid_add,mult_zero,uminus,inverse} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2089 | shows "inverse f $$ (-fls_subdegree f) = inverse (f $$ fls_subdegree f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2090 | by (cases "f=0") (simp_all add: fls_inverse_zero_conv_fls_const fls_inverse_def') | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2091 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2092 | lemma fls_lr_inverse_one: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2093 |   fixes x :: "'a::{ab_group_add,mult_zero,one}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2094 |   and   y :: "'b::{comm_monoid_add,mult_zero,uminus,one}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2095 | shows "fls_left_inverse 1 x = fls_const x" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2096 | and "fls_right_inverse 1 y = fls_const y" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2097 | using fls_lr_inverse_const[of 1] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2098 | by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2099 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2100 | lemma fls_lr_inverse_one_one: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2101 | "fls_left_inverse 1 1 = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2102 |     (1::'a::{ab_group_add,mult_zero,one} fls)"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2103 | "fls_right_inverse 1 1 = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2104 |     (1::'b::{comm_monoid_add,mult_zero,uminus,one} fls)"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2105 | using fls_lr_inverse_one[of 1] by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2106 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2107 | lemma fls_inverse_one: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2108 |   assumes "inverse (1::'a::{comm_monoid_add,inverse,mult_zero,uminus,one}) = 1"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2109 | shows "inverse (1::'a fls) = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2110 | using assms fls_lr_inverse_one_one(2) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2111 | by (simp add: fls_inverse_def') | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2112 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2113 | lemma fls_left_inverse_delta: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2114 |   fixes   b :: "'a::{ab_group_add,mult_zero}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2115 | assumes "b \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2116 | shows "fls_left_inverse (Abs_fls (\<lambda>n. if n=a then b else 0)) x = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2117 | Abs_fls (\<lambda>n. if n=-a then x else 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2118 | proof (intro fls_eqI) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2119 | fix n from assms show | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2120 | "fls_left_inverse (Abs_fls (\<lambda>n. if n=a then b else 0)) x $$ n | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2121 | = Abs_fls (\<lambda>n. if n = - a then x else 0) $$ n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2122 | using fls_base_factor_to_fps_delta[of a b] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2123 | fls_lr_inverse_const(1)[of b] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2124 | fls_shift_const | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2125 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2126 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2127 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2128 | lemma fls_right_inverse_delta: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2129 |   fixes   b :: "'a::{comm_monoid_add,mult_zero,uminus}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2130 | assumes "b \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2131 | shows "fls_right_inverse (Abs_fls (\<lambda>n. if n=a then b else 0)) x = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2132 | Abs_fls (\<lambda>n. if n=-a then x else 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2133 | proof (intro fls_eqI) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2134 | fix n from assms show | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2135 | "fls_right_inverse (Abs_fls (\<lambda>n. if n=a then b else 0)) x $$ n | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2136 | = Abs_fls (\<lambda>n. if n = - a then x else 0) $$ n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2137 | using fls_base_factor_to_fps_delta[of a b] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2138 | fls_lr_inverse_const(2)[of b] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2139 | fls_shift_const | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2140 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2141 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2142 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2143 | lemma fls_inverse_delta_nonzero: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2144 |   fixes   b :: "'a::{comm_monoid_add,inverse,mult_zero,uminus}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2145 | assumes "b \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2146 | shows "inverse (Abs_fls (\<lambda>n. if n=a then b else 0)) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2147 | Abs_fls (\<lambda>n. if n=-a then inverse b else 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2148 | using assms fls_nonzeroI[of "Abs_fls (\<lambda>n. if n=a then b else 0)" a] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2149 | by (simp add: fls_inverse_def' fls_right_inverse_delta[symmetric]) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2150 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2151 | lemma fls_inverse_delta: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2152 | fixes b :: "'a::division_ring" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2153 | shows "inverse (Abs_fls (\<lambda>n. if n=a then b else 0)) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2154 | Abs_fls (\<lambda>n. if n=-a then inverse b else 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2155 | by (cases "b=0") (simp_all add: fls_inverse_delta_nonzero) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2156 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2157 | lemma fls_lr_inverse_X: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2158 |   fixes x :: "'a::{ab_group_add,mult_zero,zero_neq_one}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2159 |   and   y :: "'b::{comm_monoid_add,uminus,mult_zero,zero_neq_one}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2160 | shows "fls_left_inverse fls_X x = fls_shift 1 (fls_const x)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2161 | and "fls_right_inverse fls_X y = fls_shift 1 (fls_const y)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2162 | using fls_lr_inverse_one(1)[of x] fls_lr_inverse_one(2)[of y] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2163 | by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2164 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2165 | lemma fls_lr_inverse_X': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2166 |   fixes x :: "'a::{ab_group_add,mult_zero,zero_neq_one,monoid_mult}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2167 |   and   y :: "'b::{comm_monoid_add,uminus,mult_zero,zero_neq_one,monoid_mult}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2168 | shows "fls_left_inverse fls_X x = fls_const x * fls_X_inv" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2169 | and "fls_right_inverse fls_X y = fls_const y * fls_X_inv" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2170 | using fls_lr_inverse_X(1)[of x] fls_lr_inverse_X(2)[of y] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2171 | by (simp_all add: fls_X_inv_times_conv_shift(2)) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2172 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2173 | lemma fls_inverse_X': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2174 |   assumes "inverse 1 = (1::'a::{comm_monoid_add,inverse,mult_zero,uminus,zero_neq_one})"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2175 | shows "inverse (fls_X::'a fls) = fls_X_inv" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2176 | using assms fls_lr_inverse_X(2)[of "1::'a"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2177 | by (simp add: fls_inverse_def' fls_X_inv_conv_shift_1) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2178 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2179 | lemma fls_inverse_X: "inverse (fls_X::'a::division_ring fls) = fls_X_inv" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2180 | by (simp add: fls_inverse_X') | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2181 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2182 | lemma fls_lr_inverse_X_inv: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2183 |   fixes x :: "'a::{ab_group_add,mult_zero,zero_neq_one}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2184 |   and   y :: "'b::{comm_monoid_add,uminus,mult_zero,zero_neq_one}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2185 | shows "fls_left_inverse fls_X_inv x = fls_shift (-1) (fls_const x)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2186 | and "fls_right_inverse fls_X_inv y = fls_shift (-1) (fls_const y)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2187 | using fls_lr_inverse_one(1)[of x] fls_lr_inverse_one(2)[of y] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2188 | by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2189 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2190 | lemma fls_lr_inverse_X_inv': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2191 |   fixes x :: "'a::{ab_group_add,mult_zero,zero_neq_one,monoid_mult}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2192 |   and   y :: "'b::{comm_monoid_add,uminus,mult_zero,zero_neq_one,monoid_mult}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2193 | shows "fls_left_inverse fls_X_inv x = fls_const x * fls_X" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2194 | and "fls_right_inverse fls_X_inv y = fls_const y * fls_X" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2195 | using fls_lr_inverse_X_inv(1)[of x] fls_lr_inverse_X_inv(2)[of y] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2196 | by (simp_all add: fls_X_times_conv_shift(2)) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2197 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2198 | lemma fls_inverse_X_inv': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2199 |   assumes "inverse 1 = (1::'a::{comm_monoid_add,inverse,mult_zero,uminus,zero_neq_one})"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2200 | shows "inverse (fls_X_inv::'a fls) = fls_X" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2201 | using assms fls_lr_inverse_X_inv(2)[of "1::'a"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2202 | by (simp add: fls_inverse_def' fls_X_conv_shift_1) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2203 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2204 | lemma fls_inverse_X_inv: "inverse (fls_X_inv::'a::division_ring fls) = fls_X" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2205 | by (simp add: fls_inverse_X_inv') | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2206 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2207 | lemma fls_lr_inverse_subdegree: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2208 | assumes "x \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2209 | shows "fls_subdegree (fls_left_inverse f x) = - fls_subdegree f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2210 | and "fls_subdegree (fls_right_inverse f x) = - fls_subdegree f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2211 | by (auto intro: fls_subdegree_eqI simp: assms) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2212 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2213 | lemma fls_inverse_subdegree': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2214 | "inverse (f $$ fls_subdegree f) \<noteq> 0 \<Longrightarrow> fls_subdegree (inverse f) = - fls_subdegree f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2215 | using fls_lr_inverse_subdegree(2)[of "inverse (f $$ fls_subdegree f)"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2216 | by (simp add: fls_inverse_def') | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2217 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2218 | lemma fls_inverse_subdegree [simp]: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2219 | fixes f :: "'a::division_ring fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2220 | shows "fls_subdegree (inverse f) = - fls_subdegree f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2221 | by (cases "f=0") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2222 | (auto intro: fls_inverse_subdegree' simp: nonzero_imp_inverse_nonzero) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2223 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2224 | lemma fls_inverse_subdegree_base_nonzero: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2225 | assumes "f \<noteq> 0" "inverse (f $$ fls_subdegree f) \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2226 | shows "inverse f $$ (fls_subdegree (inverse f)) = inverse (f $$ fls_subdegree f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2227 | using assms fls_inverse_subdegree'[of f] fls_inverse_base[of f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2228 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2229 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2230 | lemma fls_inverse_subdegree_base: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2231 |   fixes f :: "'a::{ab_group_add,inverse,mult_zero} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2232 | shows "inverse f $$ (fls_subdegree (inverse f)) = inverse (f $$ fls_subdegree f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2233 | using fls_inverse_eq_0_iff'[of f] fls_inverse_subdegree_base_nonzero[of f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2234 | by (cases "f=0 \<or> inverse (f $$ fls_subdegree f) = 0") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2235 | (auto simp: fls_inverse_zero_conv_fls_const) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2236 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2237 | lemma fls_lr_inverse_subdegree_0: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2238 | assumes "fls_subdegree f = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2239 | shows "fls_subdegree (fls_left_inverse f x) \<ge> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2240 | and "fls_subdegree (fls_right_inverse f x) \<ge> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2241 | using fls_subdegree_ge0I[of "fls_left_inverse f x"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2242 | fls_subdegree_ge0I[of "fls_right_inverse f x"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2243 | by (auto simp: assms) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2244 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2245 | lemma fls_inverse_subdegree_0: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2246 | "fls_subdegree f = 0 \<Longrightarrow> fls_subdegree (inverse f) \<ge> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2247 | using fls_lr_inverse_subdegree_0(2)[of f] by (simp add: fls_inverse_def') | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2248 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2249 | lemma fls_lr_inverse_shift_nonzero: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2250 |   fixes   f :: "'a::{comm_monoid_add,mult_zero,uminus} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2251 | assumes "f \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2252 | shows "fls_left_inverse (fls_shift m f) x = fls_shift (-m) (fls_left_inverse f x)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2253 | and "fls_right_inverse (fls_shift m f) x = fls_shift (-m) (fls_right_inverse f x)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2254 | using assms fls_base_factor_to_fps_shift[of m f] fls_shift_subdegree | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2255 | by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2256 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2257 | lemma fls_inverse_shift_nonzero: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2258 |   fixes   f :: "'a::{comm_monoid_add,inverse,mult_zero,uminus} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2259 | assumes "f \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2260 | shows "inverse (fls_shift m f) = fls_shift (-m) (inverse f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2261 | using assms fls_lr_inverse_shift_nonzero(2)[of f m "inverse (f $$ fls_subdegree f)"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2262 | by (simp add: fls_inverse_def') | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2263 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2264 | lemma fls_inverse_shift: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2265 | fixes f :: "'a::division_ring fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2266 | shows "inverse (fls_shift m f) = fls_shift (-m) (inverse f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2267 | using fls_inverse_shift_nonzero | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2268 | by (cases "f=0") simp_all | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2269 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2270 | lemma fls_left_inverse_base_factor: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2271 |   fixes   x :: "'a::{ab_group_add,mult_zero}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2272 | assumes "x \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2273 | shows "fls_left_inverse (fls_base_factor f) x = fls_base_factor (fls_left_inverse f x)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2274 | using assms fls_lr_inverse_zero(1)[of x] fls_lr_inverse_subdegree(1)[of x] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2275 | by (cases "f=0") auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2276 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2277 | lemma fls_right_inverse_base_factor: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2278 |   fixes   y :: "'a::{comm_monoid_add,mult_zero,uminus}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2279 | assumes "y \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2280 | shows "fls_right_inverse (fls_base_factor f) y = fls_base_factor (fls_right_inverse f y)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2281 | using assms fls_lr_inverse_zero(2)[of y] fls_lr_inverse_subdegree(2)[of y] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2282 | by (cases "f=0") auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2283 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2284 | lemma fls_inverse_base_factor': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2285 |   fixes   f :: "'a::{comm_monoid_add,inverse,mult_zero,uminus} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2286 | assumes "inverse (f $$ fls_subdegree f) \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2287 | shows "inverse (fls_base_factor f) = fls_base_factor (inverse f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2288 | by (cases "f=0") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2289 | (simp_all add: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2290 | assms fls_inverse_shift_nonzero fls_inverse_subdegree' | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2291 | fls_inverse_zero_conv_fls_const | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2292 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2293 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2294 | lemma fls_inverse_base_factor: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2295 |   fixes f :: "'a::{ab_group_add,inverse,mult_zero} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2296 | shows "inverse (fls_base_factor f) = fls_base_factor (inverse f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2297 | using fls_base_factor_base[of f] fls_inverse_eq_0_iff'[of f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2298 | fls_inverse_eq_0_iff'[of "fls_base_factor f"] fls_inverse_base_factor'[of f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2299 | by (cases "inverse (f $$ fls_subdegree f) = 0") simp_all | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2300 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2301 | lemma fls_lr_inverse_regpart: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2302 | assumes "fls_subdegree f = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2303 | shows "fls_regpart (fls_left_inverse f x) = fps_left_inverse (fls_regpart f) x" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2304 | and "fls_regpart (fls_right_inverse f y) = fps_right_inverse (fls_regpart f) y" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2305 | using assms | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2306 | by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2307 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2308 | lemma fls_inverse_regpart: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2309 | assumes "fls_subdegree f = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2310 | shows "fls_regpart (inverse f) = inverse (fls_regpart f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2311 | by (simp add: assms fls_inverse_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2312 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2313 | lemma fls_base_factor_to_fps_left_inverse: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2314 |   fixes   x :: "'a::{ab_group_add,mult_zero}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2315 | shows "fls_base_factor_to_fps (fls_left_inverse f x) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2316 | fps_left_inverse (fls_base_factor_to_fps f) x" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2317 | using fls_left_inverse_base_factor[of x f] fls_base_factor_subdegree[of f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2318 | by (cases "x=0") (simp_all add: fls_lr_inverse_starting0(1) fps_lr_inverse_starting0(1)) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2319 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2320 | lemma fls_base_factor_to_fps_right_inverse_nonzero: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2321 |   fixes   y :: "'a::{comm_monoid_add,mult_zero,uminus}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2322 | assumes "y \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2323 | shows "fls_base_factor_to_fps (fls_right_inverse f y) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2324 | fps_right_inverse (fls_base_factor_to_fps f) y" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2325 | using assms fls_right_inverse_base_factor[of y f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2326 | fls_base_factor_subdegree[of f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2327 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2328 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2329 | lemma fls_base_factor_to_fps_right_inverse: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2330 |   fixes   y :: "'a::{ab_group_add,mult_zero}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2331 | shows "fls_base_factor_to_fps (fls_right_inverse f y) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2332 | fps_right_inverse (fls_base_factor_to_fps f) y" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2333 | using fls_base_factor_to_fps_right_inverse_nonzero[of y f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2334 | by (cases "y=0") (simp_all add: fls_lr_inverse_starting0(2) fps_lr_inverse_starting0(2)) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2335 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2336 | lemma fls_base_factor_to_fps_inverse_nonzero: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2337 |   fixes   f :: "'a::{comm_monoid_add,inverse,mult_zero,uminus} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2338 | assumes "inverse (f $$ fls_subdegree f) \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2339 | shows "fls_base_factor_to_fps (inverse f) = inverse (fls_base_factor_to_fps f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2340 | using assms fls_base_factor_to_fps_right_inverse_nonzero | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2341 | by (simp add: fls_inverse_def' fps_inverse_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2342 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2343 | lemma fls_base_factor_to_fps_inverse: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2344 |   fixes f :: "'a::{ab_group_add,inverse,mult_zero} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2345 | shows "fls_base_factor_to_fps (inverse f) = inverse (fls_base_factor_to_fps f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2346 | using fls_base_factor_to_fps_right_inverse | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2347 | by (simp add: fls_inverse_def' fps_inverse_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2348 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2349 | lemma fls_lr_inverse_fps_to_fls: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2350 | assumes "subdegree f = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2351 | shows "fls_left_inverse (fps_to_fls f) x = fps_to_fls (fps_left_inverse f x)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2352 | and "fls_right_inverse (fps_to_fls f) x = fps_to_fls (fps_right_inverse f x)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2353 | using assms fls_base_factor_to_fps_to_fls[of f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2354 | by (simp_all add: fls_subdegree_fls_to_fps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2355 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2356 | lemma fls_inverse_fps_to_fls: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2357 | "subdegree f = 0 \<Longrightarrow> inverse (fps_to_fls f) = fps_to_fls (inverse f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2358 | using nth_subdegree_nonzero[of f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2359 | by (cases "f=0") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2360 | (auto simp add: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2361 | fps_to_fls_nonzeroI fls_inverse_def' fls_subdegree_fls_to_fps fps_inverse_def | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2362 | fls_lr_inverse_fps_to_fls(2) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2363 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2364 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2365 | lemma fls_lr_inverse_X_power: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2366 | fixes x :: "'a::ring_1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2367 |   and   y :: "'b::{semiring_1,uminus}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2368 | shows "fls_left_inverse (fls_X ^ n) x = fls_shift n (fls_const x)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2369 | and "fls_right_inverse (fls_X ^ n) y = fls_shift n (fls_const y)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2370 | using fls_lr_inverse_one(1)[of x] fls_lr_inverse_one(2)[of y] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2371 | by (simp_all add: fls_X_power_conv_shift_1) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2372 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2373 | lemma fls_lr_inverse_X_power': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2374 | fixes x :: "'a::ring_1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2375 |   and   y :: "'b::{semiring_1,uminus}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2376 | shows "fls_left_inverse (fls_X ^ n) x = fls_const x * fls_X_inv ^ n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2377 | and "fls_right_inverse (fls_X ^ n) y = fls_const y * fls_X_inv ^ n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2378 | using fls_lr_inverse_X_power(1)[of n x] fls_lr_inverse_X_power(2)[of n y] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2379 | by (simp_all add: fls_X_inv_power_times_conv_shift(2)) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2380 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2381 | lemma fls_inverse_X_power': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2382 |   assumes "inverse 1 = (1::'a::{semiring_1,uminus,inverse})"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2383 | shows "inverse ((fls_X ^ n)::'a fls) = fls_X_inv ^ n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2384 | using fls_lr_inverse_X_power'(2)[of n 1] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2385 | by (simp add: fls_inverse_def' assms ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2386 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2387 | lemma fls_inverse_X_power: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2388 | "inverse ((fls_X::'a::division_ring fls) ^ n) = fls_X_inv ^ n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2389 | by (simp add: fls_inverse_X_power') | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2390 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2391 | lemma fls_lr_inverse_X_inv_power: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2392 | fixes x :: "'a::ring_1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2393 |   and   y :: "'b::{semiring_1,uminus}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2394 | shows "fls_left_inverse (fls_X_inv ^ n) x = fls_shift (-n) (fls_const x)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2395 | and "fls_right_inverse (fls_X_inv ^ n) y = fls_shift (-n) (fls_const y)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2396 | using fls_lr_inverse_one(1)[of x] fls_lr_inverse_one(2)[of y] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2397 | by (simp_all add: fls_X_inv_power_conv_shift_1) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2398 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2399 | lemma fls_lr_inverse_X_inv_power': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2400 | fixes x :: "'a::ring_1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2401 |   and   y :: "'b::{semiring_1,uminus}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2402 | shows "fls_left_inverse (fls_X_inv ^ n) x = fls_const x * fls_X ^ n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2403 | and "fls_right_inverse (fls_X_inv ^ n) y = fls_const y * fls_X ^ n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2404 | using fls_lr_inverse_X_inv_power(1)[of n x] fls_lr_inverse_X_inv_power(2)[of n y] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2405 | by (simp_all add: fls_X_power_times_conv_shift(2)) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2406 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2407 | lemma fls_inverse_X_inv_power': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2408 |   assumes "inverse 1 = (1::'a::{semiring_1,uminus,inverse})"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2409 | shows "inverse ((fls_X_inv ^ n)::'a fls) = fls_X ^ n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2410 | using fls_lr_inverse_X_inv_power'(2)[of n 1] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2411 | by (simp add: fls_inverse_def' assms) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2412 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2413 | lemma fls_inverse_X_inv_power: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2414 | "inverse ((fls_X_inv::'a::division_ring fls) ^ n) = fls_X ^ n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2415 | by (simp add: fls_inverse_X_inv_power') | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2416 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2417 | lemma fls_lr_inverse_X_intpow: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2418 | fixes x :: "'a::ring_1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2419 |   and   y :: "'b::{semiring_1,uminus}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2420 | shows "fls_left_inverse (fls_X_intpow i) x = fls_shift i (fls_const x)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2421 | and "fls_right_inverse (fls_X_intpow i) y = fls_shift i (fls_const y)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2422 | using fls_lr_inverse_one(1)[of x] fls_lr_inverse_one(2)[of y] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2423 | by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2424 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2425 | lemma fls_lr_inverse_X_intpow': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2426 | fixes x :: "'a::ring_1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2427 |   and   y :: "'b::{semiring_1,uminus}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2428 | shows "fls_left_inverse (fls_X_intpow i) x = fls_const x * fls_X_intpow (-i)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2429 | and "fls_right_inverse (fls_X_intpow i) y = fls_const y * fls_X_intpow (-i)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2430 | using fls_lr_inverse_X_intpow(1)[of i x] fls_lr_inverse_X_intpow(2)[of i y] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2431 | by (simp_all add: fls_shifted_times_simps(1)) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2432 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2433 | lemma fls_inverse_X_intpow': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2434 |   assumes "inverse 1 = (1::'a::{semiring_1,uminus,inverse})"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2435 | shows "inverse (fls_X_intpow i :: 'a fls) = fls_X_intpow (-i)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2436 | using fls_lr_inverse_X_intpow'(2)[of i 1] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2437 | by (simp add: fls_inverse_def' assms) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2438 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2439 | lemma fls_inverse_X_intpow: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2440 | "inverse (fls_X_intpow i :: 'a::division_ring fls) = fls_X_intpow (-i)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2441 | by (simp add: fls_inverse_X_intpow') | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2442 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2443 | lemma fls_left_inverse: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2444 | fixes f :: "'a::ring_1 fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2445 | assumes "x * f $$ fls_subdegree f = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2446 | shows "fls_left_inverse f x * f = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2447 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2448 | from assms have "x \<noteq> 0" "x * (fls_base_factor_to_fps f$0) = 1" by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2449 | thus ?thesis | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2450 | using fls_base_factor_to_fps_left_inverse[of f x] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2451 | fls_lr_inverse_subdegree(1)[of x] fps_left_inverse | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2452 | by (fastforce simp: fls_times_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2453 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2454 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2455 | lemma fls_right_inverse: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2456 | fixes f :: "'a::ring_1 fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2457 | assumes "f $$ fls_subdegree f * y = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2458 | shows "f * fls_right_inverse f y = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2459 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2460 | from assms have "y \<noteq> 0" "(fls_base_factor_to_fps f$0) * y = 1" by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2461 | thus ?thesis | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2462 | using fls_base_factor_to_fps_right_inverse[of f y] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2463 | fls_lr_inverse_subdegree(2)[of y] fps_right_inverse | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2464 | by (fastforce simp: fls_times_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2465 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2466 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2467 | \<comment> \<open> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2468 | It is possible in a ring for an element to have a left inverse but not a right inverse, or | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2469 | vice versa. But when an element has both, they must be the same. | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2470 | \<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2471 | lemma fls_left_inverse_eq_fls_right_inverse: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2472 | fixes f :: "'a::ring_1 fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2473 | assumes "x * f $$ fls_subdegree f = 1" "f $$ fls_subdegree f * y = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2474 | \<comment> \<open>These assumptions imply x equals y, but no need to assume that.\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2475 | shows "fls_left_inverse f x = fls_right_inverse f y" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2476 | using assms | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2477 | by (simp add: fps_left_inverse_eq_fps_right_inverse) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2478 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2479 | lemma fls_left_inverse_eq_inverse: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2480 | fixes f :: "'a::division_ring fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2481 | shows "fls_left_inverse f (inverse (f $$ fls_subdegree f)) = inverse f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2482 | proof (cases "f=0") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2483 | case True | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2484 | hence "fls_left_inverse f (inverse (f $$ fls_subdegree f)) = fls_const (0::'a)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2485 | by (simp add: fls_lr_inverse_zero(1)[symmetric]) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2486 | with True show ?thesis by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2487 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2488 | case False thus ?thesis | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2489 | using fls_left_inverse_eq_fls_right_inverse[of "inverse (f $$ fls_subdegree f)"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2490 | by (auto simp add: fls_inverse_def') | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2491 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2492 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2493 | lemma fls_right_inverse_eq_inverse: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2494 | fixes f :: "'a::division_ring fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2495 | shows "fls_right_inverse f (inverse (f $$ fls_subdegree f)) = inverse f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2496 | proof (cases "f=0") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2497 | case True | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2498 | hence "fls_right_inverse f (inverse (f $$ fls_subdegree f)) = fls_const (0::'a)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2499 | by (simp add: fls_lr_inverse_zero(2)[symmetric]) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2500 | with True show ?thesis by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2501 | qed (simp add: fls_inverse_def') | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2502 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2503 | lemma fls_left_inverse_eq_fls_right_inverse_comm: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2504 | fixes f :: "'a::comm_ring_1 fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2505 | assumes "x * f $$ fls_subdegree f = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2506 | shows "fls_left_inverse f x = fls_right_inverse f x" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2507 | using assms fls_left_inverse_eq_fls_right_inverse[of x f x] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2508 | by (simp add: mult.commute) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2509 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2510 | lemma fls_left_inverse': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2511 | fixes f :: "'a::ring_1 fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2512 | assumes "x * f $$ fls_subdegree f = 1" "f $$ fls_subdegree f * y = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2513 | \<comment> \<open>These assumptions imply x equals y, but no need to assume that.\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2514 | shows "fls_right_inverse f y * f = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2515 | using assms fls_left_inverse_eq_fls_right_inverse[of x f y] fls_left_inverse[of x f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2516 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2517 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2518 | lemma fls_right_inverse': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2519 | fixes f :: "'a::ring_1 fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2520 | assumes "x * f $$ fls_subdegree f = 1" "f $$ fls_subdegree f * y = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2521 | \<comment> \<open>These assumptions imply x equals y, but no need to assume that.\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2522 | shows "f * fls_left_inverse f x = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2523 | using assms fls_left_inverse_eq_fls_right_inverse[of x f y] fls_right_inverse[of f y] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2524 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2525 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2526 | lemma fls_mult_left_inverse_base_factor: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2527 | fixes f :: "'a::ring_1 fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2528 | assumes "x * (f $$ fls_subdegree f) = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2529 | shows "fls_left_inverse (fls_base_factor f) x * f = fls_X_intpow (fls_subdegree f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2530 | using assms fls_base_factor_to_fps_base_factor[of f] fls_base_factor_subdegree[of f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2531 | fls_shifted_times_simps(2)[of "-fls_subdegree f" "fls_left_inverse f x" f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2532 | fls_left_inverse[of x f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2533 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2534 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2535 | lemma fls_mult_right_inverse_base_factor: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2536 | fixes f :: "'a::ring_1 fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2537 | assumes "(f $$ fls_subdegree f) * y = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2538 | shows "f * fls_right_inverse (fls_base_factor f) y = fls_X_intpow (fls_subdegree f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2539 | using assms fls_base_factor_to_fps_base_factor[of f] fls_base_factor_subdegree[of f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2540 | fls_shifted_times_simps(1)[of f "-fls_subdegree f" "fls_right_inverse f y"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2541 | fls_right_inverse[of f y] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2542 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2543 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2544 | lemma fls_mult_inverse_base_factor: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2545 | fixes f :: "'a::division_ring fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2546 | assumes "f \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2547 | shows "f * inverse (fls_base_factor f) = fls_X_intpow (fls_subdegree f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2548 | using fls_mult_right_inverse_base_factor[of f "inverse (f $$ fls_subdegree f)"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2549 | fls_base_factor_base[of f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2550 | by (simp add: assms fls_right_inverse_eq_inverse[symmetric]) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2551 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2552 | lemma fls_left_inverse_idempotent_ring1: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2553 | fixes f :: "'a::ring_1 fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2554 | assumes "x * f $$ fls_subdegree f = 1" "y * x = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2555 | \<comment> \<open>These assumptions imply y equals f $$ fls_subdegree f, but no need to assume that.\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2556 | shows "fls_left_inverse (fls_left_inverse f x) y = f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2557 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2558 | from assms(1) have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2559 | "fls_left_inverse (fls_left_inverse f x) y * fls_left_inverse f x * f = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2560 | fls_left_inverse (fls_left_inverse f x) y" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2561 | using fls_left_inverse[of x f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2562 | by (simp add: mult.assoc) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2563 | moreover have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2564 | "fls_left_inverse (fls_left_inverse f x) y * fls_left_inverse f x = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2565 | using assms fls_lr_inverse_subdegree(1)[of x f] fls_lr_inverse_base(1)[of f x] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2566 | by (fastforce intro: fls_left_inverse) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2567 | ultimately show ?thesis by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2568 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2569 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2570 | lemma fls_left_inverse_idempotent_comm_ring1: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2571 | fixes f :: "'a::comm_ring_1 fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2572 | assumes "x * f $$ fls_subdegree f = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2573 | shows "fls_left_inverse (fls_left_inverse f x) (f $$ fls_subdegree f) = f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2574 | using assms fls_left_inverse_idempotent_ring1[of x f "f $$ fls_subdegree f"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2575 | by (simp add: mult.commute) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2576 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2577 | lemma fls_right_inverse_idempotent_ring1: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2578 | fixes f :: "'a::ring_1 fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2579 | assumes "f $$ fls_subdegree f * x = 1" "x * y = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2580 | \<comment> \<open>These assumptions imply y equals f $$ fls_subdegree f, but no need to assume that.\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2581 | shows "fls_right_inverse (fls_right_inverse f x) y = f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2582 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2583 | from assms(1) have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2584 | "f * (fls_right_inverse f x * fls_right_inverse (fls_right_inverse f x) y) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2585 | fls_right_inverse (fls_right_inverse f x) y" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2586 | using fls_right_inverse [of f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2587 | by (simp add: mult.assoc[symmetric]) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2588 | moreover have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2589 | "fls_right_inverse f x * fls_right_inverse (fls_right_inverse f x) y = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2590 | using assms fls_lr_inverse_subdegree(2)[of x f] fls_lr_inverse_base(2)[of f x] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2591 | by (fastforce intro: fls_right_inverse) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2592 | ultimately show ?thesis by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2593 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2594 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2595 | lemma fls_right_inverse_idempotent_comm_ring1: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2596 | fixes f :: "'a::comm_ring_1 fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2597 | assumes "f $$ fls_subdegree f * x = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2598 | shows "fls_right_inverse (fls_right_inverse f x) (f $$ fls_subdegree f) = f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2599 | using assms fls_right_inverse_idempotent_ring1[of f x "f $$ fls_subdegree f"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2600 | by (simp add: mult.commute) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2601 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2602 | lemma fls_lr_inverse_unique_ring1: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2603 | fixes f g :: "'a :: ring_1 fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2604 | assumes fg: "f * g = 1" "g $$ fls_subdegree g * f $$ fls_subdegree f = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2605 | shows "fls_left_inverse g (f $$ fls_subdegree f) = f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2606 | and "fls_right_inverse f (g $$ fls_subdegree g) = g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2607 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2608 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2609 | have "f $$ fls_subdegree f * g $$ fls_subdegree g \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2610 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2611 | assume "f $$ fls_subdegree f * g $$ fls_subdegree g = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2612 | hence "f $$ fls_subdegree f * (g $$ fls_subdegree g * f $$ fls_subdegree f) = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2613 | by (simp add: mult.assoc[symmetric]) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2614 | with fg(2) show False by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2615 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2616 | with fg(1) have subdeg_sum: "fls_subdegree f + fls_subdegree g = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2617 | using fls_mult_nonzero_base_subdegree_eq[of f g] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2618 | hence subdeg_sum': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2619 | "fls_subdegree f = -fls_subdegree g" "fls_subdegree g = -fls_subdegree f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2620 | by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2621 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2622 | from fg(1) have f_ne_0: "f\<noteq>0" by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2623 | moreover have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2624 | "fps_left_inverse (fls_base_factor_to_fps g) (fls_regpart (fls_shift (-fls_subdegree g) f)$0) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2625 | = fls_regpart (fls_shift (-fls_subdegree g) f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2626 | proof (intro fps_lr_inverse_unique_ring1(1)) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2627 | from fg(1) show | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2628 | "fls_regpart (fls_shift (-fls_subdegree g) f) * fls_base_factor_to_fps g = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2629 | using f_ne_0 fls_times_conv_regpart[of "fls_shift (-fls_subdegree g) f" "fls_base_factor g"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2630 | fls_base_factor_subdegree[of g] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2631 | by (simp add: fls_times_both_shifted_simp subdeg_sum) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2632 | from fg(2) show | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2633 | "fls_base_factor_to_fps g $ 0 * fls_regpart (fls_shift (-fls_subdegree g) f) $ 0 = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2634 | by (simp add: subdeg_sum'(2)) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2635 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2636 | ultimately show "fls_left_inverse g (f $$ fls_subdegree f) = f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2637 | by (simp add: subdeg_sum'(2)) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2638 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2639 | from fg(1) have g_ne_0: "g\<noteq>0" by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2640 | moreover have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2641 | "fps_right_inverse (fls_base_factor_to_fps f) (fls_regpart (fls_shift (-fls_subdegree f) g)$0) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2642 | = fls_regpart (fls_shift (-fls_subdegree f) g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2643 | proof (intro fps_lr_inverse_unique_ring1(2)) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2644 | from fg(1) show | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2645 | "fls_base_factor_to_fps f * fls_regpart (fls_shift (-fls_subdegree f) g) = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2646 | using g_ne_0 fls_times_conv_regpart[of "fls_base_factor f" "fls_shift (-fls_subdegree f) g"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2647 | fls_base_factor_subdegree[of f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2648 | by (simp add: fls_times_both_shifted_simp subdeg_sum add.commute) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2649 | from fg(2) show | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2650 | "fls_regpart (fls_shift (-fls_subdegree f) g) $ 0 * fls_base_factor_to_fps f $ 0 = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2651 | by (simp add: subdeg_sum'(1)) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2652 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2653 | ultimately show "fls_right_inverse f (g $$ fls_subdegree g) = g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2654 | by (simp add: subdeg_sum'(2)) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2655 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2656 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2657 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2658 | lemma fls_lr_inverse_unique_divring: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2659 | fixes f g :: "'a ::division_ring fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2660 | assumes fg: "f * g = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2661 | shows "fls_left_inverse g (f $$ fls_subdegree f) = f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2662 | and "fls_right_inverse f (g $$ fls_subdegree g) = g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2663 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2664 | from fg have "f \<noteq>0" "g \<noteq> 0" by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2665 | with fg have "fls_subdegree f + fls_subdegree g = 0" using fls_subdegree_mult by force | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2666 | with fg have "f $$ fls_subdegree f * g $$ fls_subdegree g = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2667 | using fls_times_base[of f g] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2668 | hence "g $$ fls_subdegree g * f $$ fls_subdegree f = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2669 | using inverse_unique[of "f $$ fls_subdegree f"] left_inverse[of "f $$ fls_subdegree f"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2670 | by force | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2671 | thus | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2672 | "fls_left_inverse g (f $$ fls_subdegree f) = f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2673 | "fls_right_inverse f (g $$ fls_subdegree g) = g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2674 | using fg fls_lr_inverse_unique_ring1 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2675 | by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2676 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2677 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2678 | lemma fls_lr_inverse_minus: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2679 | fixes f :: "'a::ring_1 fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2680 | shows "fls_left_inverse (-f) (-x) = - fls_left_inverse f x" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2681 | and "fls_right_inverse (-f) (-x) = - fls_right_inverse f x" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2682 | by (simp_all add: fps_lr_inverse_minus) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2683 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2684 | lemma fls_inverse_minus [simp]: "inverse (-f) = -inverse (f :: 'a :: division_ring fls)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2685 | using fls_lr_inverse_minus(2)[of f] by (simp add: fls_inverse_def') | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2686 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2687 | lemma fls_lr_inverse_mult_ring1: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2688 | fixes f g :: "'a::ring_1 fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2689 | assumes x: "x * f $$ fls_subdegree f = 1" "f $$ fls_subdegree f * x = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2690 | and y: "y * g $$ fls_subdegree g = 1" "g $$ fls_subdegree g * y = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2691 | shows "fls_left_inverse (f * g) (y*x) = fls_left_inverse g y * fls_left_inverse f x" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2692 | and "fls_right_inverse (f * g) (y*x) = fls_right_inverse g y * fls_right_inverse f x" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2693 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2694 | from x(1) y(2) have "x * (f $$ fls_subdegree f * g $$ fls_subdegree g) * y = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2695 | by (simp add: mult.assoc) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2696 | hence base_prod: "f $$ fls_subdegree f * g $$ fls_subdegree g \<noteq> 0" by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2697 | hence subdegrees: "fls_subdegree (f*g) = fls_subdegree f + fls_subdegree g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2698 | using fls_mult_nonzero_base_subdegree_eq[of f g] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2699 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2700 | have norm: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2701 | "fls_base_factor_to_fps (f * g) = fls_base_factor_to_fps f * fls_base_factor_to_fps g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2702 | using base_prod fls_base_factor_to_fps_mult'[of f g] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2703 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2704 | have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2705 | "fls_left_inverse (f * g) (y*x) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2706 | fls_shift (fls_subdegree (f * g)) ( | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2707 | fps_to_fls ( | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2708 | fps_left_inverse (fls_base_factor_to_fps f * fls_base_factor_to_fps g) (y*x) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2709 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2710 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2711 | " | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2712 | using norm | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2713 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2714 | thus "fls_left_inverse (f * g) (y*x) = fls_left_inverse g y * fls_left_inverse f x" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2715 | using x y | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2716 | fps_lr_inverse_mult_ring1(1)[of | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2717 | x "fls_base_factor_to_fps f" y "fls_base_factor_to_fps g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2718 | ] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2719 | by (simp add: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2720 | fls_times_both_shifted_simp fls_times_fps_to_fls subdegrees algebra_simps | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2721 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2722 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2723 | have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2724 | "fls_right_inverse (f * g) (y*x) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2725 | fls_shift (fls_subdegree (f * g)) ( | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2726 | fps_to_fls ( | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2727 | fps_right_inverse (fls_base_factor_to_fps f * fls_base_factor_to_fps g) (y*x) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2728 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2729 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2730 | " | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2731 | using norm | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2732 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2733 | thus "fls_right_inverse (f * g) (y*x) = fls_right_inverse g y * fls_right_inverse f x" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2734 | using x y | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2735 | fps_lr_inverse_mult_ring1(2)[of | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2736 | x "fls_base_factor_to_fps f" y "fls_base_factor_to_fps g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2737 | ] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2738 | by (simp add: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2739 | fls_times_both_shifted_simp fls_times_fps_to_fls subdegrees algebra_simps | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2740 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2741 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2742 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2743 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2744 | lemma fls_lr_inverse_power_ring1: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2745 | fixes f :: "'a::ring_1 fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2746 | assumes x: "x * f $$ fls_subdegree f = 1" "f $$ fls_subdegree f * x = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2747 | shows "fls_left_inverse (f ^ n) (x ^ n) = (fls_left_inverse f x) ^ n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2748 | "fls_right_inverse (f ^ n) (x ^ n) = (fls_right_inverse f x) ^ n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2749 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2750 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2751 | show "fls_left_inverse (f ^ n) (x ^ n) = (fls_left_inverse f x) ^ n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2752 | proof (induct n) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2753 | case 0 show ?case using fls_lr_inverse_one(1)[of 1] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2754 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2755 | case (Suc n) with assms show ?case | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2756 | using fls_lr_inverse_mult_ring1(1)[of x f "x^n" "f^n"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2757 | by (simp add: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2758 | power_Suc2[symmetric] fls_unit_base_subdegree_power(1) left_right_inverse_power | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2759 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2760 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2761 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2762 | show "fls_right_inverse (f ^ n) (x ^ n) = (fls_right_inverse f x) ^ n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2763 | proof (induct n) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2764 | case 0 show ?case using fls_lr_inverse_one(2)[of 1] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2765 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2766 | case (Suc n) with assms show ?case | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2767 | using fls_lr_inverse_mult_ring1(2)[of x f "x^n" "f^n"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2768 | by (simp add: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2769 | power_Suc2[symmetric] fls_unit_base_subdegree_power(1) left_right_inverse_power | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2770 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2771 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2772 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2773 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2774 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2775 | lemma fls_divide_convert_times_inverse: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2776 |   fixes   f g :: "'a::{comm_monoid_add,inverse,mult_zero,uminus} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2777 | shows "f / g = f * inverse g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2778 | using fls_base_factor_to_fps_subdegree[of g] fps_to_fls_base_factor_to_fps[of f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2779 | fls_times_both_shifted_simp[of "-fls_subdegree f" "fls_base_factor f"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2780 | by (simp add: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2781 | fls_divide_def fps_divide_unit' fls_times_fps_to_fls | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2782 | fls_conv_base_factor_shift_subdegree fls_inverse_def | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2783 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2784 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2785 | instance fls :: (division_ring) division_ring | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2786 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2787 | fix a b :: "'a fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2788 | show "a \<noteq> 0 \<Longrightarrow> inverse a * a = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2789 | using fls_left_inverse'[of "inverse (a $$ fls_subdegree a)" a] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2790 | by (simp add: fls_inverse_def') | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2791 | show "a \<noteq> 0 \<Longrightarrow> a * inverse a = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2792 | using fls_right_inverse[of a] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2793 | by (simp add: fls_inverse_def') | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2794 | show "a / b = a * inverse b" using fls_divide_convert_times_inverse by fast | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2795 | show "inverse (0::'a fls) = 0" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2796 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2797 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2798 | lemma fls_lr_inverse_mult_divring: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2799 | fixes f g :: "'a::division_ring fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2800 | and df dg :: int | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2801 | defines "df \<equiv> fls_subdegree f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2802 | and "dg \<equiv> fls_subdegree g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2803 | shows "fls_left_inverse (f*g) (inverse ((f*g)$$(df+dg))) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2804 | fls_left_inverse g (inverse (g$$dg)) * fls_left_inverse f (inverse (f$$df))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2805 | and "fls_right_inverse (f*g) (inverse ((f*g)$$(df+dg))) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2806 | fls_right_inverse g (inverse (g$$dg)) * fls_right_inverse f (inverse (f$$df))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2807 | proof - | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2808 | show | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2809 | "fls_left_inverse (f*g) (inverse ((f*g)$$(df+dg))) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2810 | fls_left_inverse g (inverse (g$$dg)) * fls_left_inverse f (inverse (f$$df))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2811 | proof (cases "f=0 \<or> g=0") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2812 | case True thus ?thesis | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2813 | using fls_lr_inverse_zero(1)[of "inverse (0::'a)"] by (auto simp add: assms) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2814 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2815 | case False thus ?thesis | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2816 | using fls_left_inverse_eq_inverse[of "f*g"] nonzero_inverse_mult_distrib[of f g] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2817 | fls_left_inverse_eq_inverse[of g] fls_left_inverse_eq_inverse[of f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2818 | by (simp add: assms) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2819 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2820 | show | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2821 | "fls_right_inverse (f*g) (inverse ((f*g)$$(df+dg))) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2822 | fls_right_inverse g (inverse (g$$dg)) * fls_right_inverse f (inverse (f$$df))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2823 | proof (cases "f=0 \<or> g=0") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2824 | case True thus ?thesis | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2825 | using fls_lr_inverse_zero(2)[of "inverse (0::'a)"] by (auto simp add: assms) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2826 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2827 | case False thus ?thesis | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2828 | using fls_inverse_def'[of "f*g"] nonzero_inverse_mult_distrib[of f g] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2829 | fls_inverse_def'[of g] fls_inverse_def'[of f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2830 | by (simp add: assms) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2831 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2832 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2833 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2834 | lemma fls_lr_inverse_power_divring: | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70337diff
changeset | 2835 | "fls_left_inverse (f ^ n) ((inverse (f $$ fls_subdegree f)) ^ n) = | 
| 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70337diff
changeset | 2836 | (fls_left_inverse f (inverse (f $$ fls_subdegree f))) ^ n" (is ?P) | 
| 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70337diff
changeset | 2837 | and "fls_right_inverse (f ^ n) ((inverse (f $$ fls_subdegree f)) ^ n) = | 
| 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70337diff
changeset | 2838 | (fls_right_inverse f (inverse (f $$ fls_subdegree f))) ^ n" (is ?Q) | 
| 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70337diff
changeset | 2839 | for f :: "'a::division_ring fls" | 
| 69791 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2840 | proof - | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70337diff
changeset | 2841 | note fls_left_inverse_eq_inverse [of f] fls_right_inverse_eq_inverse[of f] | 
| 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70337diff
changeset | 2842 | moreover have | 
| 69791 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2843 | "fls_right_inverse (f ^ n) ((inverse (f $$ fls_subdegree f)) ^ n) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2844 | inverse f ^ n" | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70337diff
changeset | 2845 | using fls_right_inverse_eq_inverse [of "f ^ n"] | 
| 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70337diff
changeset | 2846 | by (simp add: fls_subdegree_pow power_inverse) | 
| 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70337diff
changeset | 2847 | moreover have | 
| 69791 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2848 | "fls_left_inverse (f ^ n) ((inverse (f $$ fls_subdegree f)) ^ n) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2849 | inverse f ^ n" | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70337diff
changeset | 2850 | using fls_left_inverse_eq_inverse [of "f ^ n"] | 
| 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70337diff
changeset | 2851 | by (simp add: fls_subdegree_pow power_inverse) | 
| 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70337diff
changeset | 2852 | ultimately show ?P and ?Q | 
| 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70337diff
changeset | 2853 | by simp_all | 
| 69791 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2854 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2855 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2856 | instance fls :: (field) field | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2857 | by (standard, simp_all add: field_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2858 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2859 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2860 | subsubsection \<open>Division\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2861 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2862 | lemma fls_divide_nth_below: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2863 |   fixes f g :: "'a::{comm_monoid_add,uminus,times,inverse} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2864 | shows "n < fls_subdegree f - fls_subdegree g \<Longrightarrow> (f div g) $$ n = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2865 | by (simp add: fls_divide_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2866 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2867 | lemma fls_divide_nth_base: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2868 | fixes f g :: "'a::division_ring fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2869 | shows | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2870 | "(f div g) $$ (fls_subdegree f - fls_subdegree g) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2871 | f $$ fls_subdegree f / g $$ fls_subdegree g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2872 | using fps_divide_nth_0'[of "fls_base_factor_to_fps g" "fls_base_factor_to_fps f"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2873 | fls_base_factor_to_fps_subdegree[of g] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2874 | by (simp add: fls_divide_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2875 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2876 | lemma fls_div_zero [simp]: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2877 |   "0 div (g :: 'a :: {comm_monoid_add,inverse,mult_zero,uminus} fls) = 0"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2878 | by (simp add: fls_divide_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2879 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2880 | lemma fls_div_by_zero: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2881 |   fixes   g :: "'a::{comm_monoid_add,inverse,mult_zero,uminus} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2882 | assumes "inverse (0::'a) = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2883 | shows "g div 0 = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2884 | by (simp add: fls_divide_def assms fps_div_by_zero') | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2885 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2886 | lemma fls_divide_times: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2887 |   fixes f g :: "'a::{semiring_0,inverse,uminus} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2888 | shows "(f * g) / h = f * (g / h)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2889 | by (simp add: fls_divide_convert_times_inverse mult.assoc) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2890 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2891 | lemma fls_divide_times2: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2892 |   fixes f g :: "'a::{comm_semiring_0,inverse,uminus} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2893 | shows "(f * g) / h = (f / h) * g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2894 | using fls_divide_times[of g f h] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2895 | by (simp add: mult.commute) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2896 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2897 | lemma fls_divide_subdegree_ge: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2898 |   fixes   f g :: "'a::{comm_monoid_add,uminus,times,inverse} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2899 | assumes "f / g \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2900 | shows "fls_subdegree (f / g) \<ge> fls_subdegree f - fls_subdegree g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2901 | using assms fls_divide_nth_below | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2902 | by (intro fls_subdegree_geI) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2903 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2904 | lemma fls_divide_subdegree: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2905 | fixes f g :: "'a::division_ring fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2906 | assumes "f \<noteq> 0" "g \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2907 | shows "fls_subdegree (f / g) = fls_subdegree f - fls_subdegree g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2908 | proof (intro antisym) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2909 | from assms have "f $$ fls_subdegree f / g $$ fls_subdegree g \<noteq> 0" by (simp add: field_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2910 | thus "fls_subdegree (f/g) \<le> fls_subdegree f - fls_subdegree g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2911 | using fls_divide_nth_base[of f g] by (intro fls_subdegree_leI) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2912 | from assms have "f / g \<noteq> 0" by (simp add: field_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2913 | thus "fls_subdegree (f/g) \<ge> fls_subdegree f - fls_subdegree g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2914 | using fls_divide_subdegree_ge by fast | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2915 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2916 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2917 | lemma fls_divide_shift_numer_nonzero: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2918 |   fixes   f g :: "'a :: {comm_monoid_add,inverse,times,uminus} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2919 | assumes "f \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2920 | shows "fls_shift m f / g = fls_shift m (f/g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2921 | using assms fls_base_factor_to_fps_shift[of m f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2922 | by (simp add: fls_divide_def algebra_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2923 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2924 | lemma fls_divide_shift_numer: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2925 |   fixes f g :: "'a :: {comm_monoid_add,inverse,mult_zero,uminus} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2926 | shows "fls_shift m f / g = fls_shift m (f/g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2927 | using fls_divide_shift_numer_nonzero | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2928 | by (cases "f=0") auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2929 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2930 | lemma fls_divide_shift_denom_nonzero: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2931 |   fixes   f g :: "'a :: {comm_monoid_add,inverse,times,uminus} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2932 | assumes "g \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2933 | shows "f / fls_shift m g = fls_shift (-m) (f/g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2934 | using assms fls_base_factor_to_fps_shift[of m g] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2935 | by (simp add: fls_divide_def algebra_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2936 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2937 | lemma fls_divide_shift_denom: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2938 | fixes f g :: "'a :: division_ring fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2939 | shows "f / fls_shift m g = fls_shift (-m) (f/g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2940 | using fls_divide_shift_denom_nonzero | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2941 | by (cases "g=0") auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2942 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2943 | lemma fls_divide_shift_both_nonzero: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2944 |   fixes   f g :: "'a :: {comm_monoid_add,inverse,times,uminus} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2945 | assumes "f \<noteq> 0" "g \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2946 | shows "fls_shift n f / fls_shift m g = fls_shift (n-m) (f/g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2947 | by (simp add: assms fls_divide_shift_numer_nonzero fls_divide_shift_denom_nonzero) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2948 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2949 | lemma fls_divide_shift_both [simp]: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2950 | fixes f g :: "'a :: division_ring fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2951 | shows "fls_shift n f / fls_shift m g = fls_shift (n-m) (f/g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2952 | using fls_divide_shift_both_nonzero | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2953 | by (cases "f=0 \<or> g=0") auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2954 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2955 | lemma fls_divide_base_factor_numer: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2956 | "fls_base_factor f / g = fls_shift (fls_subdegree f) (f/g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2957 | using fls_base_factor_to_fps_base_factor[of f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2958 | fls_base_factor_subdegree[of f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2959 | by (simp add: fls_divide_def algebra_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2960 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2961 | lemma fls_divide_base_factor_denom: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2962 | "f / fls_base_factor g = fls_shift (-fls_subdegree g) (f/g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2963 | using fls_base_factor_to_fps_base_factor[of g] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2964 | fls_base_factor_subdegree[of g] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2965 | by (simp add: fls_divide_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2966 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2967 | lemma fls_divide_base_factor': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2968 | "fls_base_factor f / fls_base_factor g = fls_shift (fls_subdegree f - fls_subdegree g) (f/g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2969 | using fls_divide_base_factor_numer[of f "fls_base_factor g"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2970 | fls_divide_base_factor_denom[of f g] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2971 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2972 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2973 | lemma fls_divide_base_factor: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2974 | fixes f g :: "'a :: division_ring fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2975 | shows "fls_base_factor f / fls_base_factor g = fls_base_factor (f/g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2976 | using fls_divide_subdegree[of f g] fls_divide_base_factor' | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2977 | by fastforce | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2978 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2979 | lemma fls_divide_regpart: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2980 |   fixes   f g :: "'a::{inverse,comm_monoid_add,uminus,mult_zero} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2981 | assumes "fls_subdegree f \<ge> 0" "fls_subdegree g \<ge> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2982 | shows "fls_regpart (f / g) = fls_regpart f / fls_regpart g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2983 | proof - | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2984 | have deg0: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2985 | "\<And>g. fls_subdegree g = 0 \<Longrightarrow> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2986 | fls_regpart (f / g) = fls_regpart f / fls_regpart g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2987 | by (simp add: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2988 | assms(1) fls_divide_convert_times_inverse fls_inverse_subdegree_0 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2989 | fls_times_conv_regpart fls_inverse_regpart fls_regpart_subdegree_conv fps_divide_unit' | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2990 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2991 | show ?thesis | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2992 | proof (cases "fls_subdegree g = 0") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2993 | case False | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2994 | hence "fls_base_factor g \<noteq> 0" using fls_base_factor_nonzero[of g] by force | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2995 | with assms(2) show ?thesis | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2996 | using fls_divide_shift_denom_nonzero[of "fls_base_factor g" f "-fls_subdegree g"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2997 | fps_shift_fls_regpart_conv_fls_shift[of | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2998 | "nat (fls_subdegree g)" "f / fls_base_factor g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2999 | ] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3000 | fls_base_factor_subdegree[of g] deg0 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3001 | fls_regpart_subdegree_conv[of g] fps_unit_factor_fls_regpart[of g] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3002 | by (simp add: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3003 | fls_conv_base_factor_shift_subdegree fls_regpart_subdegree_conv fps_divide_def | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3004 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3005 | qed (rule deg0) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3006 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3007 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3008 | lemma fls_divide_fls_base_factor_to_fps': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3009 |   fixes f g :: "'a::{comm_monoid_add,uminus,inverse,mult_zero} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3010 | shows | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3011 | "fls_base_factor_to_fps f / fls_base_factor_to_fps g = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3012 | fls_regpart (fls_shift (fls_subdegree f - fls_subdegree g) (f / g))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3013 | using fls_base_factor_subdegree[of f] fls_base_factor_subdegree[of g] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3014 | fls_divide_regpart[of "fls_base_factor f" "fls_base_factor g"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3015 | fls_divide_base_factor'[of f g] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3016 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3017 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3018 | lemma fls_divide_fls_base_factor_to_fps: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3019 | fixes f g :: "'a::division_ring fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3020 | shows "fls_base_factor_to_fps f / fls_base_factor_to_fps g = fls_base_factor_to_fps (f / g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3021 | using fls_divide_fls_base_factor_to_fps' fls_divide_subdegree[of f g] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3022 | by fastforce | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3023 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3024 | lemma fls_divide_fps_to_fls: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3025 |   fixes f g :: "'a::{inverse,ab_group_add,mult_zero} fps"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3026 | assumes "subdegree f \<ge> subdegree g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3027 | shows "fps_to_fls f / fps_to_fls g = fps_to_fls (f/g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3028 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3029 | have 1: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3030 | "fps_to_fls f / fps_to_fls g = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3031 | fls_shift (int (subdegree g)) (fps_to_fls (f * inverse (unit_factor g)))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3032 | using fls_base_factor_to_fps_to_fls[of f] fls_base_factor_to_fps_to_fls[of g] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3033 | fls_subdegree_fls_to_fps[of f] fls_subdegree_fls_to_fps[of g] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3034 | fps_divide_def[of "unit_factor f" "unit_factor g"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3035 | fls_times_fps_to_fls[of "unit_factor f" "inverse (unit_factor g)"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3036 | fls_shifted_times_simps(2)[of "-int (subdegree f)" "fps_to_fls (unit_factor f)"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3037 | fls_times_fps_to_fls[of f "inverse (unit_factor g)"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3038 | by (simp add: fls_divide_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3039 | with assms show ?thesis | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3040 | using fps_mult_subdegree_ge[of f "inverse (unit_factor g)"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3041 | fps_shift_to_fls[of "subdegree g" "f * inverse (unit_factor g)"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3042 | by (cases "f * inverse (unit_factor g) = 0") (simp_all add: fps_divide_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3043 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3044 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3045 | lemma fls_divide_1': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3046 |   fixes   f :: "'a::{comm_monoid_add,inverse,mult_zero,uminus,zero_neq_one,monoid_mult} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3047 | assumes "inverse (1::'a) = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3048 | shows "f / 1 = f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3049 | using assms fls_conv_base_factor_to_fps_shift_subdegree[of f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3050 | by (simp add: fls_divide_def fps_divide_1') | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3051 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3052 | lemma fls_divide_1 [simp]: "a / 1 = (a::'a::division_ring fls)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3053 | by (rule fls_divide_1'[OF inverse_1]) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3054 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3055 | lemma fls_const_divide_const: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3056 | fixes x y :: "'a::division_ring" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3057 | shows "fls_const x / fls_const y = fls_const (x/y)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3058 | by (simp add: fls_divide_def fls_base_factor_to_fps_const fps_const_divide) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3059 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3060 | lemma fls_divide_X': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3061 |   fixes   f :: "'a::{comm_monoid_add,inverse,mult_zero,uminus,zero_neq_one,monoid_mult} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3062 | assumes "inverse (1::'a) = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3063 | shows "f / fls_X = fls_shift 1 f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3064 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3065 | from assms have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3066 | "f / fls_X = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3067 | fls_shift 1 (fls_shift (-fls_subdegree f) (fps_to_fls (fls_base_factor_to_fps f)))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3068 | by (simp add: fls_divide_def fps_divide_1') | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3069 | also have "\<dots> = fls_shift 1 f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3070 | using fls_conv_base_factor_to_fps_shift_subdegree[of f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3071 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3072 | finally show ?thesis by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3073 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3074 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3075 | lemma fls_divide_X [simp]: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3076 | fixes f :: "'a::division_ring fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3077 | shows "f / fls_X = fls_shift 1 f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3078 | by (rule fls_divide_X'[OF inverse_1]) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3079 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3080 | lemma fls_divide_X_power': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3081 |   fixes   f :: "'a::{semiring_1,inverse,uminus} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3082 | assumes "inverse (1::'a) = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3083 | shows "f / (fls_X ^ n) = fls_shift n f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3084 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3085 | have "fls_base_factor_to_fps ((fls_X::'a fls) ^ n) = 1" by (rule fls_X_power_base_factor_to_fps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3086 | with assms have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3087 | "f / (fls_X ^ n) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3088 | fls_shift n (fls_shift (-fls_subdegree f) (fps_to_fls (fls_base_factor_to_fps f)))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3089 | by (simp add: fls_divide_def fps_divide_1') | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3090 | also have "\<dots> = fls_shift n f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3091 | using fls_conv_base_factor_to_fps_shift_subdegree[of f] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3092 | finally show ?thesis by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3093 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3094 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3095 | lemma fls_divide_X_power [simp]: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3096 | fixes f :: "'a::division_ring fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3097 | shows "f / (fls_X ^ n) = fls_shift n f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3098 | by (rule fls_divide_X_power'[OF inverse_1]) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3099 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3100 | lemma fls_divide_X_inv': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3101 |   fixes   f :: "'a::{comm_monoid_add,inverse,mult_zero,uminus,zero_neq_one,monoid_mult} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3102 | assumes "inverse (1::'a) = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3103 | shows "f / fls_X_inv = fls_shift (-1) f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3104 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3105 | from assms have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3106 | "f / fls_X_inv = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3107 | fls_shift (-1) (fls_shift (-fls_subdegree f) (fps_to_fls (fls_base_factor_to_fps f)))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3108 | by (simp add: fls_divide_def fps_divide_1' algebra_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3109 | also have "\<dots> = fls_shift (-1) f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3110 | using fls_conv_base_factor_to_fps_shift_subdegree[of f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3111 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3112 | finally show ?thesis by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3113 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3114 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3115 | lemma fls_divide_X_inv [simp]: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3116 | fixes f :: "'a::division_ring fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3117 | shows "f / fls_X_inv = fls_shift (-1) f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3118 | by (rule fls_divide_X_inv'[OF inverse_1]) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3119 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3120 | lemma fls_divide_X_inv_power': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3121 |   fixes   f :: "'a::{semiring_1,inverse,uminus} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3122 | assumes "inverse (1::'a) = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3123 | shows "f / (fls_X_inv ^ n) = fls_shift (-int n) f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3124 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3125 | have "fls_base_factor_to_fps ((fls_X_inv::'a fls) ^ n) = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3126 | by (rule fls_X_inv_power_base_factor_to_fps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3127 | with assms have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3128 | "f / (fls_X_inv ^ n) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3129 | fls_shift (-int n + -fls_subdegree f) (fps_to_fls (fls_base_factor_to_fps f))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3130 | by (simp add: fls_divide_def fps_divide_1') | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3131 | also have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3132 | "\<dots> = fls_shift (-int n) (fls_shift (-fls_subdegree f) (fps_to_fls (fls_base_factor_to_fps f)))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3133 | by (simp add: add.commute) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3134 | also have "\<dots> = fls_shift (-int n) f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3135 | using fls_conv_base_factor_to_fps_shift_subdegree[of f] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3136 | finally show ?thesis by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3137 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3138 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3139 | lemma fls_divide_X_inv_power [simp]: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3140 | fixes f :: "'a::division_ring fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3141 | shows "f / (fls_X_inv ^ n) = fls_shift (-int n) f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3142 | by (rule fls_divide_X_inv_power'[OF inverse_1]) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3143 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3144 | lemma fls_divide_X_intpow': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3145 |   fixes   f :: "'a::{semiring_1,inverse,uminus} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3146 | assumes "inverse (1::'a) = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3147 | shows "f / (fls_X_intpow i) = fls_shift i f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3148 | using assms | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3149 | by (simp add: fls_divide_shift_denom_nonzero fls_divide_1') | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3150 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3151 | lemma fls_divide_X_intpow_conv_times': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3152 |   fixes   f :: "'a::{semiring_1,inverse,uminus} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3153 | assumes "inverse (1::'a) = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3154 | shows "f / (fls_X_intpow i) = f * fls_X_intpow (-i)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3155 | using assms fls_X_intpow_times_conv_shift(2)[of f "-i"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3156 | by (simp add: fls_divide_X_intpow') | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3157 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3158 | lemma fls_divide_X_intpow: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3159 | fixes f :: "'a::division_ring fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3160 | shows "f / (fls_X_intpow i) = fls_shift i f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3161 | by (rule fls_divide_X_intpow'[OF inverse_1]) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3162 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3163 | lemma fls_divide_X_intpow_conv_times: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3164 | fixes f :: "'a::division_ring fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3165 | shows "f / (fls_X_intpow i) = f * fls_X_intpow (-i)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3166 | by (rule fls_divide_X_intpow_conv_times'[OF inverse_1]) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3167 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3168 | lemma fls_X_intpow_div_fls_X_intpow_semiring1: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3169 |   assumes "inverse (1::'a::{semiring_1,inverse,uminus}) = 1"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3170 | shows "(fls_X_intpow i :: 'a fls) / fls_X_intpow j = fls_X_intpow (i-j)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3171 | by (simp add: assms fls_divide_shift_both_nonzero fls_divide_1') | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3172 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3173 | lemma fls_X_intpow_div_fls_X_intpow: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3174 | "(fls_X_intpow i :: 'a::division_ring fls) / fls_X_intpow j = fls_X_intpow (i-j)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3175 | by (rule fls_X_intpow_div_fls_X_intpow_semiring1[OF inverse_1]) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3176 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3177 | lemma fls_divide_add: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3178 |   fixes   f g h :: "'a::{semiring_0,inverse,uminus} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3179 | shows "(f + g) / h = f / h + g / h" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3180 | by (simp add: fls_divide_convert_times_inverse algebra_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3181 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3182 | lemma fls_divide_diff: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3183 |   fixes f g h :: "'a::{ring,inverse} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3184 | shows "(f - g) / h = f / h - g / h" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3185 | by (simp add: fls_divide_convert_times_inverse algebra_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3186 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3187 | lemma fls_divide_uminus: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3188 |   fixes f g h :: "'a::{ring,inverse} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3189 | shows "(- f) / g = - (f / g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3190 | by (simp add: fls_divide_convert_times_inverse) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3191 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3192 | lemma fls_divide_uminus': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3193 | fixes f g h :: "'a::division_ring fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3194 | shows "f / (- g) = - (f / g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3195 | by (simp add: fls_divide_convert_times_inverse) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3196 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3197 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3198 | subsubsection \<open>Units\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3199 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3200 | lemma fls_is_left_unit_iff_base_is_left_unit: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3201 | fixes f :: "'a :: ring_1_no_zero_divisors fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3202 | shows "(\<exists>g. 1 = f * g) \<longleftrightarrow> (\<exists>k. 1 = f $$ fls_subdegree f * k)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3203 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3204 | assume "\<exists>g. 1 = f * g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3205 | then obtain g where "1 = f * g" by fast | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3206 | hence "1 = (f $$ fls_subdegree f) * (g $$ fls_subdegree g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3207 | using fls_subdegree_mult[of f g] fls_times_base[of f g] by fastforce | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3208 | thus "\<exists>k. 1 = f $$ fls_subdegree f * k" by fast | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3209 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3210 | assume "\<exists>k. 1 = f $$ fls_subdegree f * k" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3211 | then obtain k where "1 = f $$ fls_subdegree f * k" by fast | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3212 | hence "1 = f * fls_right_inverse f k" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3213 | using fls_right_inverse by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3214 | thus "\<exists>g. 1 = f * g" by fast | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3215 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3216 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3217 | lemma fls_is_right_unit_iff_base_is_right_unit: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3218 | fixes f :: "'a :: ring_1_no_zero_divisors fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3219 | shows "(\<exists>g. 1 = g * f) \<longleftrightarrow> (\<exists>k. 1 = k * f $$ fls_subdegree f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3220 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3221 | assume "\<exists>g. 1 = g * f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3222 | then obtain g where "1 = g * f" by fast | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3223 | hence "1 = (g $$ fls_subdegree g) * (f $$ fls_subdegree f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3224 | using fls_subdegree_mult[of g f] fls_times_base[of g f] by fastforce | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3225 | thus "\<exists>k. 1 = k * f $$ fls_subdegree f" by fast | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3226 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3227 | assume "\<exists>k. 1 = k * f $$ fls_subdegree f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3228 | then obtain k where "1 = k * f $$ fls_subdegree f" by fast | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3229 | hence "1 = fls_left_inverse f k * f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3230 | using fls_left_inverse by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3231 | thus "\<exists>g. 1 = g * f" by fast | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3232 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3233 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3234 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3235 | subsection \<open>Formal differentiation and integration\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3236 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3237 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3238 | subsubsection \<open>Derivative definition and basic properties\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3239 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3240 | definition "fls_deriv f = Abs_fls (\<lambda>n. of_int (n+1) * f$$(n+1))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3241 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3242 | lemma fls_deriv_nth[simp]: "fls_deriv f $$ n = of_int (n+1) * f$$(n+1)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3243 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3244 | obtain N where "\<forall>n<N. f$$n = 0" by (elim fls_nth_vanishes_belowE) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3245 | hence "\<forall>n<N-1. of_int (n+1) * f$$(n+1) = 0" by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3246 | thus ?thesis using nth_Abs_fls_lower_bound unfolding fls_deriv_def by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3247 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3248 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3249 | lemma fls_deriv_residue: "fls_deriv f $$ -1 = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3250 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3251 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3252 | lemma fls_deriv_const[simp]: "fls_deriv (fls_const x) = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3253 | proof (intro fls_eqI) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3254 | fix n show "fls_deriv (fls_const x) $$ n = 0$$n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3255 | by (cases "n+1=0") auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3256 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3257 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3258 | lemma fls_deriv_of_nat[simp]: "fls_deriv (of_nat n) = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3259 | by (simp add: fls_of_nat) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3260 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3261 | lemma fls_deriv_of_int[simp]: "fls_deriv (of_int i) = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3262 | by (simp add: fls_of_int) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3263 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3264 | lemma fls_deriv_zero[simp]: "fls_deriv 0 = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3265 | using fls_deriv_const[of 0] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3266 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3267 | lemma fls_deriv_one[simp]: "fls_deriv 1 = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3268 | using fls_deriv_const[of 1] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3269 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3270 | lemma fls_deriv_subdegree': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3271 | assumes "of_int (fls_subdegree f) * f $$ fls_subdegree f \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3272 | shows "fls_subdegree (fls_deriv f) = fls_subdegree f - 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3273 | by (auto intro: fls_subdegree_eqI simp: assms) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3274 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3275 | lemma fls_deriv_subdegree0: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3276 | assumes "fls_subdegree f = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3277 | shows "fls_subdegree (fls_deriv f) \<ge> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3278 | proof (cases "fls_deriv f = 0") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3279 | case False | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3280 | show ?thesis | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3281 | proof (intro fls_subdegree_geI, rule False) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3282 | fix k :: int assume "k < 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3283 | with assms show "fls_deriv f $$ k = 0" by (cases "k=-1") auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3284 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3285 | qed simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3286 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3287 | lemma fls_subdegree_deriv': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3288 | fixes f :: "'a::ring_1_no_zero_divisors fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3289 | assumes "(of_int (fls_subdegree f) :: 'a) \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3290 | shows "fls_subdegree (fls_deriv f) = fls_subdegree f - 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3291 | using assms nth_fls_subdegree_zero_iff[of f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3292 | by (auto intro: fls_deriv_subdegree') | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3293 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3294 | lemma fls_subdegree_deriv: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3295 |   fixes   f :: "'a::{ring_1_no_zero_divisors,ring_char_0} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3296 | assumes "fls_subdegree f \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3297 | shows "fls_subdegree (fls_deriv f) = fls_subdegree f - 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3298 | by (auto intro: fls_subdegree_deriv' simp: assms) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3299 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3300 | text \<open> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3301 | Shifting is like multiplying by a power of the implied variable, and so satisfies a product-like | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3302 | rule. | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3303 | \<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3304 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3305 | lemma fls_deriv_shift: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3306 | "fls_deriv (fls_shift n f) = of_int (-n) * fls_shift (n+1) f + fls_shift n (fls_deriv f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3307 | by (intro fls_eqI) (simp flip: fls_shift_fls_shift add: algebra_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3308 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3309 | lemma fls_deriv_X [simp]: "fls_deriv fls_X = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3310 | by (intro fls_eqI) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3311 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3312 | lemma fls_deriv_X_inv [simp]: "fls_deriv fls_X_inv = - (fls_X_inv\<^sup>2)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3313 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3314 | have "fls_deriv fls_X_inv = - (fls_shift 2 1)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3315 | by (simp add: fls_X_inv_conv_shift_1 fls_deriv_shift) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3316 | thus ?thesis by (simp add: fls_X_inv_power_conv_shift_1) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3317 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3318 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3319 | lemma fls_deriv_delta: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3320 | "fls_deriv (Abs_fls (\<lambda>n. if n=m then c else 0)) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3321 | Abs_fls (\<lambda>n. if n=m-1 then of_int m * c else 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3322 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3323 | have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3324 | "fls_deriv (Abs_fls (\<lambda>n. if n=m then c else 0)) = fls_shift (1-m) (fls_const (of_int m * c))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3325 | using fls_deriv_shift[of "-m" "fls_const c"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3326 | by (simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3327 | add: fls_shift_const fls_of_int fls_shifted_times_simps(1)[symmetric] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3328 | fls_const_mult_const[symmetric] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3329 | del: fls_const_mult_const | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3330 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3331 | thus ?thesis by (simp add: fls_shift_const) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3332 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3333 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3334 | lemma fls_deriv_base_factor: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3335 | "fls_deriv (fls_base_factor f) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3336 | of_int (-fls_subdegree f) * fls_shift (fls_subdegree f + 1) f + | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3337 | fls_shift (fls_subdegree f) (fls_deriv f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3338 | by (simp add: fls_deriv_shift) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3339 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3340 | lemma fls_regpart_deriv: "fls_regpart (fls_deriv f) = fps_deriv (fls_regpart f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3341 | proof (intro fps_ext) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3342 | fix n | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3343 | have 1: "(of_nat n :: 'a) + 1 = of_nat (n+1)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3344 | and 2: "int n + 1 = int (n + 1)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3345 | by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3346 | show "fls_regpart (fls_deriv f) $ n = fps_deriv (fls_regpart f) $ n" by (simp add: 1 2) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3347 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3348 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3349 | lemma fls_prpart_deriv: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3350 |   fixes f :: "'a :: {comm_ring_1,ring_no_zero_divisors} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3351 |   \<comment> \<open>Commutivity and no zero divisors are required by the definition of @{const pderiv}.\<close>
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3352 | shows "fls_prpart (fls_deriv f) = - pCons 0 (pCons 0 (pderiv (fls_prpart f)))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3353 | proof (intro poly_eqI) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3354 | fix n | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3355 | show | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3356 | "coeff (fls_prpart (fls_deriv f)) n = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3357 | coeff (- pCons 0 (pCons 0 (pderiv (fls_prpart f)))) n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3358 | proof (cases n) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3359 | case (Suc m) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3360 | hence n: "n = Suc m" by fast | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3361 | show ?thesis | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3362 | proof (cases m) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3363 | case (Suc k) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3364 | with n have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3365 | "coeff (- pCons 0 (pCons 0 (pderiv (fls_prpart f)))) n = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3366 | - coeff (pderiv (fls_prpart f)) k" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3367 | by (simp flip: coeff_minus) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3368 | with Suc n show ?thesis by (simp add: coeff_pderiv algebra_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3369 | qed (simp add: n) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3370 | qed simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3371 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3372 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3373 | lemma pderiv_fls_prpart: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3374 | "pderiv (fls_prpart f) = - poly_shift 2 (fls_prpart (fls_deriv f))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3375 | by (intro poly_eqI) (simp add: coeff_pderiv coeff_poly_shift algebra_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3376 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3377 | lemma fls_deriv_fps_to_fls: "fls_deriv (fps_to_fls f) = fps_to_fls (fps_deriv f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3378 | proof (intro fls_eqI) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3379 | fix n | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3380 | show "fls_deriv (fps_to_fls f) $$ n = fps_to_fls (fps_deriv f) $$ n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3381 | proof (cases "n\<ge>0") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3382 | case True | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3383 | from True have 1: "nat (n + 1) = nat n + 1" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3384 | from True have 2: "(of_int (n + 1) :: 'a) = of_nat (nat (n+1))" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3385 | from True show ?thesis using arg_cong[OF 2, of "\<lambda>x. x * f $ (nat n+1)"] by (simp add: 1) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3386 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3387 | case False thus ?thesis by (cases "n=-1") auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3388 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3389 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3390 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3391 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3392 | subsubsection \<open>Algebra rules of the derivative\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3393 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3394 | lemma fls_deriv_add [simp]: "fls_deriv (f+g) = fls_deriv f + fls_deriv g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3395 | by (auto intro: fls_eqI simp: algebra_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3396 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3397 | lemma fls_deriv_sub [simp]: "fls_deriv (f-g) = fls_deriv f - fls_deriv g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3398 | by (auto intro: fls_eqI simp: algebra_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3399 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3400 | lemma fls_deriv_neg [simp]: "fls_deriv (-f) = - fls_deriv f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3401 | using fls_deriv_sub[of 0 f] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3402 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3403 | lemma fls_deriv_mult [simp]: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3404 | "fls_deriv (f*g) = f * fls_deriv g + fls_deriv f * g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3405 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3406 | define df dg :: int | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3407 | where "df \<equiv> fls_subdegree f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3408 | and "dg \<equiv> fls_subdegree g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3409 | define uf ug :: "'a fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3410 | where "uf \<equiv> fls_base_factor f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3411 | and "ug \<equiv> fls_base_factor g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3412 | have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3413 | "f * fls_deriv g = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3414 | of_int dg * fls_shift (1 - dg) (f * ug) + fls_shift (-dg) (f * fls_deriv ug)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3415 | "fls_deriv f * g = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3416 | of_int df * fls_shift (1 - df) (uf * g) + fls_shift (-df) (fls_deriv uf * g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3417 | using fls_deriv_shift[of "-df" uf] fls_deriv_shift[of "-dg" ug] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3418 | mult_of_int_commute[of dg f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3419 | mult.assoc[of "of_int dg" f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3420 | fls_shifted_times_simps(1)[of f "1 - dg" ug] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3421 | fls_shifted_times_simps(1)[of f "-dg" "fls_deriv ug"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3422 | fls_shifted_times_simps(2)[of "1 - df" uf g] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3423 | fls_shifted_times_simps(2)[of "-df" "fls_deriv uf" g] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3424 | by (auto simp add: algebra_simps df_def dg_def uf_def ug_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3425 | moreover have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3426 | "fls_deriv (f*g) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3427 | ( of_int dg * fls_shift (1 - dg) (f * ug) + fls_shift (-dg) (f * fls_deriv ug) ) + | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3428 | ( of_int df * fls_shift (1 - df) (uf * g) + fls_shift (-df) (fls_deriv uf * g) ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3429 | " | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3430 | using fls_deriv_shift[of | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3431 | "- (df + dg)" "fps_to_fls (fls_base_factor_to_fps f * fls_base_factor_to_fps g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3432 | ] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3433 | fls_deriv_fps_to_fls[of "fls_base_factor_to_fps f * fls_base_factor_to_fps g"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3434 | fps_deriv_mult[of "fls_base_factor_to_fps f" "fls_base_factor_to_fps g"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3435 | distrib_right[of | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3436 | "of_int df" "of_int dg" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3437 | "fls_shift (1 - (df + dg)) ( | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3438 | fps_to_fls (fls_base_factor_to_fps f * fls_base_factor_to_fps g) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3439 | )" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3440 | ] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3441 | fls_times_conv_fps_times[of uf ug] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3442 | fls_base_factor_subdegree[of f] fls_base_factor_subdegree[of g] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3443 | fls_regpart_deriv[of ug] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3444 | fls_times_conv_fps_times[of uf "fls_deriv ug"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3445 | fls_deriv_subdegree0[of ug] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3446 | fls_regpart_deriv[of uf] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3447 | fls_times_conv_fps_times[of "fls_deriv uf" ug] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3448 | fls_deriv_subdegree0[of uf] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3449 | fls_shifted_times_simps(1)[of uf "-dg" ug] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3450 | fls_shifted_times_simps(1)[of "fls_deriv uf" "-dg" ug] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3451 | fls_shifted_times_simps(2)[of "-df" uf ug] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3452 | fls_shifted_times_simps(2)[of "-df" uf "fls_deriv ug"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3453 | by (simp add: fls_times_def algebra_simps df_def dg_def uf_def ug_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3454 | ultimately show ?thesis by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3455 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3456 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3457 | lemma fls_deriv_mult_const_left: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3458 | "fls_deriv (fls_const c * f) = fls_const c * fls_deriv f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3459 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3460 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3461 | lemma fls_deriv_linear: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3462 | "fls_deriv (fls_const a * f + fls_const b * g) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3463 | fls_const a * fls_deriv f + fls_const b * fls_deriv g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3464 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3465 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3466 | lemma fls_deriv_mult_const_right: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3467 | "fls_deriv (f * fls_const c) = fls_deriv f * fls_const c" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3468 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3469 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3470 | lemma fls_deriv_linear2: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3471 | "fls_deriv (f * fls_const a + g * fls_const b) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3472 | fls_deriv f * fls_const a + fls_deriv g * fls_const b" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3473 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3474 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3475 | lemma fls_deriv_sum: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3476 | "fls_deriv (sum f S) = sum (\<lambda>i. fls_deriv (f i)) S" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3477 | proof (cases "finite S") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3478 | case True show ?thesis | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3479 | by (induct rule: finite_induct [OF True]) simp_all | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3480 | qed simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3481 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3482 | lemma fls_deriv_power: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3483 | fixes f :: "'a::comm_ring_1 fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3484 | shows "fls_deriv (f^n) = of_nat n * f^(n-1) * fls_deriv f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3485 | proof (cases n) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3486 | case (Suc m) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3487 | have "fls_deriv (f^Suc m) = of_nat (Suc m) * f^m * fls_deriv f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3488 | by (induct m) (simp_all add: algebra_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3489 | with Suc show ?thesis by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3490 | qed simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3491 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3492 | lemma fls_deriv_X_power: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3493 | "fls_deriv (fls_X ^ n) = of_nat n * fls_X ^ (n-1)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3494 | proof (cases n) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3495 | case (Suc m) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3496 | have "fls_deriv (fls_X^Suc m) = of_nat (Suc m) * fls_X^m" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3497 | by (induct m) (simp_all add: mult_of_nat_commute algebra_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3498 | with Suc show ?thesis by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3499 | qed simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3500 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3501 | lemma fls_deriv_X_inv_power: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3502 | "fls_deriv (fls_X_inv ^ n) = - of_nat n * fls_X_inv ^ (Suc n)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3503 | proof (cases n) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3504 | case (Suc m) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3505 | define iX :: "'a fls" where "iX \<equiv> fls_X_inv" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3506 | have "fls_deriv (iX ^ Suc m) = - of_nat (Suc m) * iX ^ (Suc (Suc m))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3507 | proof (induct m) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3508 | case (Suc m) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3509 | have "- of_nat (Suc m + 1) * iX ^ Suc (Suc (Suc m)) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3510 | iX * (-of_nat (Suc m) * iX ^ Suc (Suc m)) + | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3511 | - (iX ^ 2 * iX ^ Suc m)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3512 | using distrib_right[of "-of_nat (Suc m)" "-(1::'a fls)" "fls_X_inv ^ Suc (Suc (Suc m))"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3513 | by (simp add: algebra_simps mult_of_nat_commute power2_eq_square Suc iX_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3514 | thus ?case using Suc by (simp add: iX_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3515 | qed (simp add: numeral_2_eq_2 iX_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3516 | with Suc show ?thesis by (simp add: iX_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3517 | qed simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3518 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3519 | lemma fls_deriv_X_intpow: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3520 | "fls_deriv (fls_X_intpow i) = of_int i * fls_X_intpow (i-1)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3521 | by (simp add: fls_deriv_shift) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3522 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3523 | lemma fls_deriv_lr_inverse: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3524 | assumes "x * f $$ fls_subdegree f = 1" "f $$ fls_subdegree f * y = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3525 | \<comment> \<open>These assumptions imply x equals y, but no need to assume that.\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3526 | shows "fls_deriv (fls_left_inverse f x) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3527 | - fls_left_inverse f x * fls_deriv f * fls_left_inverse f x" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3528 | and "fls_deriv (fls_right_inverse f y) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3529 | - fls_right_inverse f y * fls_deriv f * fls_right_inverse f y" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3530 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3531 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3532 | define L where "L \<equiv> fls_left_inverse f x" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3533 | hence "fls_deriv (L * f) = 0" using fls_left_inverse[OF assms(1)] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3534 | with assms show "fls_deriv L = - L * fls_deriv f * L" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3535 | using fls_right_inverse'[OF assms] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3536 | by (simp add: minus_unique mult.assoc L_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3537 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3538 | define R where "R \<equiv> fls_right_inverse f y" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3539 | hence "fls_deriv (f * R) = 0" using fls_right_inverse[OF assms(2)] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3540 | hence 1: "f * fls_deriv R + fls_deriv f * R = 0" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3541 | have "R * f * fls_deriv R = - R * fls_deriv f * R" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3542 | using iffD2[OF eq_neg_iff_add_eq_0, OF 1] by (simp add: mult.assoc) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3543 | thus "fls_deriv R = - R * fls_deriv f * R" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3544 | using fls_left_inverse'[OF assms] by (simp add: R_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3545 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3546 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3547 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3548 | lemma fls_deriv_lr_inverse_comm: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3549 | fixes x y :: "'a::comm_ring_1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3550 | assumes "x * f $$ fls_subdegree f = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3551 | shows "fls_deriv (fls_left_inverse f x) = - fls_deriv f * (fls_left_inverse f x)\<^sup>2" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3552 | and "fls_deriv (fls_right_inverse f x) = - fls_deriv f * (fls_right_inverse f x)\<^sup>2" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3553 | using assms fls_deriv_lr_inverse[of x f x] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3554 | by (simp_all add: mult.commute power2_eq_square) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3555 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3556 | lemma fls_inverse_deriv_divring: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3557 | fixes a :: "'a::division_ring fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3558 | shows "fls_deriv (inverse a) = - inverse a * fls_deriv a * inverse a" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3559 | proof (cases "a=0") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3560 | case False thus ?thesis | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3561 | using fls_deriv_lr_inverse(2)[of | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3562 | "inverse (a $$ fls_subdegree a)" a "inverse (a $$ fls_subdegree a)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3563 | ] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3564 | by (auto simp add: fls_inverse_def') | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3565 | qed simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3566 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3567 | lemma fls_inverse_deriv: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3568 | fixes a :: "'a::field fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3569 | shows "fls_deriv (inverse a) = - fls_deriv a * (inverse a)\<^sup>2" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3570 | by (simp add: fls_inverse_deriv_divring power2_eq_square) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3571 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3572 | lemma fls_inverse_deriv': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3573 | fixes a :: "'a::field fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3574 | shows "fls_deriv (inverse a) = - fls_deriv a / a\<^sup>2" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3575 | using fls_inverse_deriv[of a] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3576 | by (simp add: field_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3577 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3578 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3579 | subsubsection \<open>Equality of derivatives\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3580 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3581 | lemma fls_deriv_eq_0_iff: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3582 |   "fls_deriv f = 0 \<longleftrightarrow> f = fls_const (f$$0 :: 'a::{ring_1_no_zero_divisors,ring_char_0})"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3583 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3584 | assume f: "fls_deriv f = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3585 | show "f = fls_const (f$$0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3586 | proof (intro fls_eqI) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3587 | fix n | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3588 | from f have "of_int n * f$$ n = 0" using fls_deriv_nth[of f "n-1"] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3589 | thus "f$$n = fls_const (f$$0) $$ n" by (cases "n=0") auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3590 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3591 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3592 | show "f = fls_const (f$$0) \<Longrightarrow> fls_deriv f = 0" using fls_deriv_const[of "f$$0"] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3593 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3594 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3595 | lemma fls_deriv_eq_iff: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3596 |   fixes f g :: "'a::{ring_1_no_zero_divisors,ring_char_0} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3597 | shows "fls_deriv f = fls_deriv g \<longleftrightarrow> (f = fls_const(f$$0 - g$$0) + g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3598 | proof - | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3599 | have "fls_deriv f = fls_deriv g \<longleftrightarrow> fls_deriv (f - g) = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3600 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3601 | also have "\<dots> \<longleftrightarrow> f - g = fls_const ((f - g) $$ 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3602 | unfolding fls_deriv_eq_0_iff .. | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3603 | finally show ?thesis | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3604 | by (simp add: field_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3605 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3606 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3607 | lemma fls_deriv_eq_iff_ex: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3608 |   fixes f g :: "'a::{ring_1_no_zero_divisors,ring_char_0} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3609 | shows "(fls_deriv f = fls_deriv g) \<longleftrightarrow> (\<exists>c. f = fls_const c + g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3610 | by (auto simp: fls_deriv_eq_iff) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3611 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3612 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3613 | subsubsection \<open>Residues\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3614 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3615 | definition fls_residue_def[simp]: "fls_residue f \<equiv> f $$ -1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3616 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3617 | lemma fls_residue_deriv: "fls_residue (fls_deriv f) = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3618 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3619 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3620 | lemma fls_residue_add: "fls_residue (f+g) = fls_residue f + fls_residue g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3621 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3622 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3623 | lemma fls_residue_times_deriv: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3624 | "fls_residue (fls_deriv f * g) = - fls_residue (f * fls_deriv g)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3625 | using fls_residue_deriv[of "f*g"] minus_unique[of "fls_residue (f * fls_deriv g)"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3626 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3627 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3628 | lemma fls_residue_power_series: "fls_subdegree f \<ge> 0 \<Longrightarrow> fls_residue f = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3629 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3630 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3631 | lemma fls_residue_fls_X_intpow: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3632 | "fls_residue (fls_X_intpow i) = (if i=-1 then 1 else 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3633 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3634 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3635 | lemma fls_residue_shift_nth: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3636 | fixes f :: "'a::semiring_1 fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3637 | shows "f$$n = fls_residue (fls_X_intpow (-n-1) * f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3638 | by (simp add: fls_shifted_times_transfer) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3639 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3640 | lemma fls_residue_fls_const_times: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3641 |   fixes f :: "'a::{comm_monoid_add, mult_zero} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3642 | shows "fls_residue (fls_const c * f) = c * fls_residue f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3643 | and "fls_residue (f * fls_const c) = fls_residue f * c" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3644 | by simp_all | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3645 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3646 | lemma fls_residue_of_int_times: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3647 | fixes f :: "'a::ring_1 fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3648 | shows "fls_residue (of_int i * f) = of_int i * fls_residue f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3649 | and "fls_residue (f * of_int i) = fls_residue f * of_int i" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3650 | by (simp_all add: fls_residue_fls_const_times fls_of_int) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3651 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3652 | lemma fls_residue_deriv_times_lr_inverse_eq_subdegree: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3653 | fixes f g :: "'a::ring_1 fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3654 | assumes "y * (f $$ fls_subdegree f) = 1" "(f $$ fls_subdegree f) * y = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3655 | shows "fls_residue (fls_deriv f * fls_right_inverse f y) = of_int (fls_subdegree f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3656 | and "fls_residue (fls_deriv f * fls_left_inverse f y) = of_int (fls_subdegree f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3657 | and "fls_residue (fls_left_inverse f y * fls_deriv f) = of_int (fls_subdegree f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3658 | and "fls_residue (fls_right_inverse f y * fls_deriv f) = of_int (fls_subdegree f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3659 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3660 | define df :: int where "df \<equiv> fls_subdegree f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3661 | define B X :: "'a fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3662 | where "B \<equiv> fls_base_factor f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3663 | and "X \<equiv> (fls_X_intpow df :: 'a fls)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3664 | define D L R :: "'a fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3665 | where "D \<equiv> fls_deriv B" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3666 | and "L \<equiv> fls_left_inverse B y" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3667 | and "R \<equiv> fls_right_inverse B y" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3668 | have intpow_diff: "fls_X_intpow (df - 1) = X * fls_X_inv" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3669 | using fls_X_intpow_diff_conv_times[of df 1] by (simp add: X_def fls_X_inv_conv_shift_1) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3670 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3671 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3672 | show "fls_residue (fls_deriv f * fls_right_inverse f y) = of_int df" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3673 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3674 | have subdegree_DR: "fls_subdegree (D * R) \<ge> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3675 | using fls_base_factor_subdegree[of f] fls_base_factor_subdegree[of "fls_right_inverse f y"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3676 | assms(1) fls_right_inverse_base_factor[of y f] fls_mult_subdegree_ge_0[of D R] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3677 | by (force simp: fls_deriv_subdegree0 D_def R_def B_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3678 | have decomp: "f = X * B" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3679 | unfolding X_def B_def df_def by (rule fls_base_factor_X_power_decompose(2)[of f]) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3680 | hence "fls_deriv f = X * D + of_int df * X * fls_X_inv * B" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3681 | using intpow_diff fls_deriv_mult[of X B] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3682 | by (simp add: fls_deriv_X_intpow X_def B_def D_def mult.assoc) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3683 | moreover from assms have "fls_right_inverse (X * B) y = R * fls_right_inverse X 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3684 | using fls_base_factor_base[of f] fls_lr_inverse_mult_ring1(2)[of 1 X] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3685 | by (simp add: X_def B_def R_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3686 | ultimately have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3687 | "fls_deriv f * fls_right_inverse f y = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3688 | (D + of_int df * fls_X_inv * B) * R * (X * fls_right_inverse X 1)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3689 | by (simp add: decomp algebra_simps X_def fls_X_intpow_times_comm) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3690 | also have "\<dots> = D * R + of_int df * fls_X_inv" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3691 | using fls_right_inverse[of X 1] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3692 | assms fls_base_factor_base[of f] fls_right_inverse[of B y] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3693 | by (simp add: X_def distrib_right mult.assoc B_def R_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3694 | finally show ?thesis using subdegree_DR by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3695 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3696 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3697 | with assms show "fls_residue (fls_deriv f * fls_left_inverse f y) = of_int df" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3698 | using fls_left_inverse_eq_fls_right_inverse[of y f] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3699 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3700 | show "fls_residue (fls_left_inverse f y * fls_deriv f) = of_int df" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3701 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3702 | have subdegree_LD: "fls_subdegree (L * D) \<ge> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3703 | using fls_base_factor_subdegree[of f] fls_base_factor_subdegree[of "fls_left_inverse f y"] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3704 | assms(1) fls_left_inverse_base_factor[of y f] fls_mult_subdegree_ge_0[of L D] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3705 | by (force simp: fls_deriv_subdegree0 D_def L_def B_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3706 | have decomp: "f = B * X" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3707 | unfolding X_def B_def df_def by (rule fls_base_factor_X_power_decompose(1)[of f]) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3708 | hence "fls_deriv f = D * X + B * of_int df * X * fls_X_inv" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3709 | using intpow_diff fls_deriv_mult[of B X] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3710 | by (simp add: fls_deriv_X_intpow X_def D_def B_def mult.assoc) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3711 | moreover from assms have "fls_left_inverse (B * X) y = fls_left_inverse X 1 * L" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3712 | using fls_base_factor_base[of f] fls_lr_inverse_mult_ring1(1)[of _ _ 1 X] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3713 | by (simp add: X_def B_def L_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3714 | ultimately have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3715 | "fls_left_inverse f y * fls_deriv f = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3716 | fls_left_inverse X 1 * X * L * (D + B * (of_int df * fls_X_inv))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3717 | by (simp add: decomp algebra_simps X_def fls_X_intpow_times_comm) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3718 | also have "\<dots> = L * D + of_int df * fls_X_inv" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3719 | using assms fls_left_inverse[of 1 X] fls_base_factor_base[of f] fls_left_inverse[of y B] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3720 | by (simp add: X_def distrib_left mult.assoc[symmetric] L_def B_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3721 | finally show ?thesis using subdegree_LD by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3722 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3723 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3724 | with assms show "fls_residue (fls_right_inverse f y * fls_deriv f) = of_int df" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3725 | using fls_left_inverse_eq_fls_right_inverse[of y f] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3726 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3727 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3728 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3729 | lemma fls_residue_deriv_times_inverse_eq_subdegree: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3730 | fixes f g :: "'a::division_ring fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3731 | shows "fls_residue (fls_deriv f * inverse f) = of_int (fls_subdegree f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3732 | and "fls_residue (inverse f * fls_deriv f) = of_int (fls_subdegree f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3733 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3734 | show "fls_residue (fls_deriv f * inverse f) = of_int (fls_subdegree f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3735 | using fls_residue_deriv_times_lr_inverse_eq_subdegree(1)[of _ f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3736 | by (cases "f=0") (auto simp: fls_inverse_def') | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3737 | show "fls_residue (inverse f * fls_deriv f) = of_int (fls_subdegree f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3738 | using fls_residue_deriv_times_lr_inverse_eq_subdegree(4)[of _ f] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3739 | by (cases "f=0") (auto simp: fls_inverse_def') | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3740 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3741 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3742 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3743 | subsubsection \<open>Integral definition and basic properties\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3744 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3745 | \<comment> \<open>To incorporate a constant of integration, just add an fps_const.\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3746 | definition fls_integral :: "'a::{ring_1,inverse} fls \<Rightarrow> 'a fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3747 | where "fls_integral a = Abs_fls (\<lambda>n. if n=0 then 0 else inverse (of_int n) * a$$(n - 1))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3748 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3749 | lemma fls_integral_nth [simp]: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3750 | "fls_integral a $$ n = (if n=0 then 0 else inverse (of_int n) * a$$(n-1))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3751 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3752 | define F where "F \<equiv> (\<lambda>n. if n=0 then 0 else inverse (of_int n) * a$$(n - 1))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3753 | obtain N where "\<forall>n<N. a$$n = 0" by (elim fls_nth_vanishes_belowE) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3754 | hence "\<forall>n<N. F n = 0" by (auto simp add: F_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3755 | thus ?thesis using nth_Abs_fls_lower_bound[of N F] unfolding fls_integral_def F_def by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3756 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3757 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3758 | lemma fls_integral_conv_fps_zeroth_integral: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3759 | assumes "fls_subdegree a \<ge> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3760 | shows "fls_integral a = fps_to_fls (fps_integral0 (fls_regpart a))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3761 | proof (rule fls_eqI) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3762 | fix n | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3763 | show "fls_integral a $$ n = fps_to_fls (fps_integral0 (fls_regpart a)) $$ n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3764 | proof (cases "n>0") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3765 | case False with assms show ?thesis by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3766 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3767 | case True | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3768 | hence "int ((nat n) - 1) = n - 1" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3769 | with True show ?thesis by (simp add: fps_integral_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3770 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3771 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3772 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3773 | lemma fls_integral_zero [simp]: "fls_integral 0 = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3774 | by (intro fls_eqI) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3775 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3776 | lemma fls_integral_const': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3777 |   fixes   x :: "'a::{ring_1,inverse}"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3778 | assumes "inverse (1::'a) = 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3779 | shows "fls_integral (fls_const x) = fls_const x * fls_X" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3780 | by (intro fls_eqI) (simp add: assms) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3781 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3782 | lemma fls_integral_const: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3783 | fixes x :: "'a::division_ring" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3784 | shows "fls_integral (fls_const x) = fls_const x * fls_X" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3785 | by (rule fls_integral_const'[OF inverse_1]) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3786 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3787 | lemma fls_integral_of_nat': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3788 |   assumes "inverse (1::'a::{ring_1,inverse}) = 1"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3789 | shows "fls_integral (of_nat n :: 'a fls) = of_nat n * fls_X" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3790 | by (simp add: assms fls_integral_const' fls_of_nat) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3791 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3792 | lemma fls_integral_of_nat: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3793 | "fls_integral (of_nat n :: 'a::division_ring fls) = of_nat n * fls_X" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3794 | by (rule fls_integral_of_nat'[OF inverse_1]) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3795 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3796 | lemma fls_integral_of_int': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3797 |   assumes "inverse (1::'a::{ring_1,inverse}) = 1"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3798 | shows "fls_integral (of_int i :: 'a fls) = of_int i * fls_X" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3799 | by (simp add: assms fls_integral_const' fls_of_int) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3800 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3801 | lemma fls_integral_of_int: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3802 | "fls_integral (of_int i :: 'a::division_ring fls) = of_int i * fls_X" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3803 | by (rule fls_integral_of_int'[OF inverse_1]) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3804 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3805 | lemma fls_integral_one': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3806 |   assumes "inverse (1::'a::{ring_1,inverse}) = 1"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3807 | shows "fls_integral (1::'a fls) = fls_X" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3808 | using fls_integral_const'[of 1] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3809 | by (force simp: assms) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3810 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3811 | lemma fls_integral_one: "fls_integral (1::'a::division_ring fls) = fls_X" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3812 | by (rule fls_integral_one'[OF inverse_1]) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3813 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3814 | lemma fls_subdegree_integral_ge: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3815 | "fls_integral f \<noteq> 0 \<Longrightarrow> fls_subdegree (fls_integral f) \<ge> fls_subdegree f + 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3816 | by (intro fls_subdegree_geI) simp_all | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3817 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3818 | lemma fls_subdegree_integral: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3819 |   fixes   f :: "'a::{division_ring,ring_char_0} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3820 | assumes "f \<noteq> 0" "fls_subdegree f \<noteq> -1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3821 | shows "fls_subdegree (fls_integral f) = fls_subdegree f + 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3822 | using assms of_int_0_eq_iff[of "fls_subdegree f + 1"] fls_subdegree_integral_ge | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3823 | by (intro fls_subdegree_eqI) simp_all | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3824 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3825 | lemma fls_integral_X [simp]: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3826 |   "fls_integral (fls_X::'a::{ring_1,inverse} fls) =
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3827 | fls_const (inverse (of_int 2)) * fls_X\<^sup>2" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3828 | proof (intro fls_eqI) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3829 | fix n | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3830 | show "fls_integral (fls_X::'a fls) $$ n = (fls_const (inverse (of_int 2)) * fls_X\<^sup>2) $$ n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3831 | using arg_cong[OF fls_X_power_nth, of "\<lambda>x. inverse (of_int 2) * x", of 2 n, symmetric] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3832 | by (auto simp add: ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3833 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3834 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3835 | lemma fls_integral_X_power: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3836 |   "fls_integral (fls_X ^ n ::'a :: {ring_1,inverse} fls) =
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3837 | fls_const (inverse (of_nat (Suc n))) * fls_X ^ Suc n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3838 | proof (intro fls_eqI) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3839 | fix k | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3840 | have "(fls_X :: 'a fls) ^ Suc n $$ k = (if k=Suc n then 1 else 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3841 | by (rule fls_X_power_nth) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3842 | thus | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3843 | "fls_integral ((fls_X::'a fls) ^ n) $$ k = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3844 | (fls_const (inverse (of_nat (Suc n))) * (fls_X::'a fls) ^ Suc n) $$ k" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3845 | by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3846 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3847 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3848 | lemma fls_integral_X_power_char0: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3849 |   "fls_integral (fls_X ^ n :: 'a :: {ring_char_0,inverse} fls) =
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3850 | inverse (of_nat (Suc n)) * fls_X ^ Suc n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3851 | proof - | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3852 | have "(of_nat (Suc n) :: 'a) \<noteq> 0" by (rule of_nat_neq_0) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3853 | hence "fls_const (inverse (of_nat (Suc n) :: 'a)) = inverse (fls_const (of_nat (Suc n)))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3854 | by (simp add: fls_inverse_const) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3855 | moreover have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3856 | "fls_integral ((fls_X::'a fls) ^ n) = fls_const (inverse (of_nat (Suc n))) * fls_X ^ Suc n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3857 | by (rule fls_integral_X_power) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3858 | ultimately show ?thesis by (simp add: fls_of_nat) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3859 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3860 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3861 | lemma fls_integral_X_inv [simp]: "fls_integral (fls_X_inv::'a::{ring_1,inverse} fls) = 0"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3862 | by (intro fls_eqI) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3863 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3864 | lemma fls_integral_X_inv_power: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3865 | assumes "n \<ge> 2" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3866 | shows | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3867 |     "fls_integral (fls_X_inv ^ n :: 'a :: {ring_1,inverse} fls) =
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3868 | fls_const (inverse (of_int (1 - int n))) * fls_X_inv ^ (n-1)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3869 | proof (rule fls_eqI) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3870 | fix k show | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3871 | "fls_integral (fls_X_inv ^ n :: 'a fls) $$ k= | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3872 | (fls_const (inverse (of_int (1 - int n))) * fls_X_inv ^ (n-1)) $$ k" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3873 | proof (cases "k=0") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3874 | case True with assms show ?thesis by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3875 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3876 | case False | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3877 | from assms have "int (n-1) = int n - 1" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3878 | hence | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3879 | "(fls_const (inverse (of_int (1 - int n))) * (fls_X_inv:: 'a fls) ^ (n-1)) $$ k = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3880 | (if k = 1 - int n then inverse (of_int k) else 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3881 | by (simp add: fls_X_inv_power_times_conv_shift(2)) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3882 | with False show ?thesis by (simp add: algebra_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3883 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3884 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3885 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3886 | lemma fls_integral_X_inv_power_char0: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3887 | assumes "n \<ge> 2" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3888 | shows | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3889 |     "fls_integral (fls_X_inv ^ n :: 'a :: {ring_char_0,inverse} fls) =
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3890 | inverse (of_int (1 - int n)) * fls_X_inv ^ (n-1)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3891 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3892 | from assms have "(of_int (1 - int n) :: 'a) \<noteq> 0" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3893 | hence | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3894 | "fls_const (inverse (of_int (1 - int n) :: 'a)) = inverse (fls_const (of_int (1 - int n)))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3895 | by (simp add: fls_inverse_const) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3896 | moreover have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3897 | "fls_integral (fls_X_inv ^ n :: 'a fls) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3898 | fls_const (inverse (of_int (1 - int n))) * fls_X_inv ^ (n-1)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3899 | using assms by (rule fls_integral_X_inv_power) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3900 | ultimately show ?thesis by (simp add: fls_of_int) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3901 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3902 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3903 | lemma fls_integral_X_inv_power': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3904 | assumes "n \<ge> 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3905 | shows | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3906 | "fls_integral (fls_X_inv ^ n :: 'a :: division_ring fls) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3907 | - fls_const (inverse (of_nat (n-1))) * fls_X_inv ^ (n-1)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3908 | proof (cases "n = 1") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3909 | case False | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3910 | with assms have n: "n \<ge> 2" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3911 | hence | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3912 | "fls_integral (fls_X_inv ^ n :: 'a fls) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3913 | fls_const (inverse (- of_nat (nat (int n - 1)))) * fls_X_inv ^ (n-1)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3914 | by (simp add: fls_integral_X_inv_power) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3915 | moreover from n have "nat (int n - 1) = n - 1" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3916 | ultimately show ?thesis | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3917 | using inverse_minus_eq[of "of_nat (n-1) :: 'a"] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3918 | qed simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3919 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3920 | lemma fls_integral_X_inv_power_char0': | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3921 | assumes "n \<ge> 1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3922 | shows | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3923 |     "fls_integral (fls_X_inv ^ n :: 'a :: {division_ring,ring_char_0} fls) =
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3924 | - inverse (of_nat (n-1)) * fls_X_inv ^ (n-1)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3925 | proof (cases "n=1") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3926 | case False with assms show ?thesis | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3927 | by (simp add: fls_integral_X_inv_power' fls_inverse_const fls_of_nat) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3928 | qed simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3929 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3930 | lemma fls_integral_delta: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3931 | assumes "m \<noteq> -1" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3932 | shows | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3933 | "fls_integral (Abs_fls (\<lambda>n. if n=m then c else 0)) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3934 | Abs_fls (\<lambda>n. if n=m+1 then inverse (of_int (m+1)) * c else 0)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3935 | using assms | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3936 | by (intro fls_eqI) auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3937 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3938 | lemma fls_regpart_integral: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3939 | "fls_regpart (fls_integral f) = fps_integral0 (fls_regpart f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3940 | proof (rule fps_ext) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3941 | fix n | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3942 | show "fls_regpart (fls_integral f) $ n = fps_integral0 (fls_regpart f) $ n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3943 | by (cases n) (simp_all add: fps_integral_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3944 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3945 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3946 | lemma fls_integral_fps_to_fls: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3947 | "fls_integral (fps_to_fls f) = fps_to_fls (fps_integral0 f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3948 | proof (intro fls_eqI) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3949 | fix n :: int | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3950 | show "fls_integral (fps_to_fls f) $$ n = fps_to_fls (fps_integral0 f) $$ n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3951 | proof (cases "n<1") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3952 | case True thus ?thesis by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3953 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3954 | case False | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3955 | hence "nat (n-1) = nat n - 1" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3956 | with False show ?thesis by (cases "nat n") auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3957 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3958 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3959 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3960 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3961 | subsubsection \<open>Algebra rules of the integral\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3962 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3963 | lemma fls_integral_add [simp]: "fls_integral (f+g) = fls_integral f + fls_integral g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3964 | by (intro fls_eqI) (simp add: algebra_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3965 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3966 | lemma fls_integral_sub [simp]: "fls_integral (f-g) = fls_integral f - fls_integral g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3967 | by (intro fls_eqI) (simp add: algebra_simps) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3968 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3969 | lemma fls_integral_neg [simp]: "fls_integral (-f) = - fls_integral f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3970 | using fls_integral_sub[of 0 f] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3971 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3972 | lemma fls_integral_mult_const_left: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3973 | "fls_integral (fls_const c * f) = fls_const c * fls_integral (f :: 'a::division_ring fls)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3974 | by (intro fls_eqI) (simp add: mult.assoc mult_inverse_of_int_commute) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3975 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3976 | lemma fls_integral_mult_const_left_comm: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3977 |   fixes f :: "'a::{comm_ring_1,inverse} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3978 | shows "fls_integral (fls_const c * f) = fls_const c * fls_integral f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3979 | by (intro fls_eqI) (simp add: mult.assoc mult.commute) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3980 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3981 | lemma fls_integral_linear: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3982 | fixes f g :: "'a::division_ring fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3983 | shows | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3984 | "fls_integral (fls_const a * f + fls_const b * g) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3985 | fls_const a * fls_integral f + fls_const b * fls_integral g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3986 | by (simp add: fls_integral_mult_const_left) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3987 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3988 | lemma fls_integral_linear_comm: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3989 |   fixes f g :: "'a::{comm_ring_1,inverse} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3990 | shows | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3991 | "fls_integral (fls_const a * f + fls_const b * g) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3992 | fls_const a * fls_integral f + fls_const b * fls_integral g" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3993 | by (simp add: fls_integral_mult_const_left_comm) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3994 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3995 | lemma fls_integral_mult_const_right: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3996 | "fls_integral (f * fls_const c) = fls_integral f * fls_const c" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3997 | by (intro fls_eqI) (simp add: mult.assoc) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3998 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3999 | lemma fls_integral_linear2: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4000 | "fls_integral (f * fls_const a + g * fls_const b) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4001 | fls_integral f * fls_const a + fls_integral g * fls_const b" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4002 | by (simp add: fls_integral_mult_const_right) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4003 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4004 | lemma fls_integral_sum: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4005 | "fls_integral (sum f S) = sum (\<lambda>i. fls_integral (f i)) S" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4006 | proof (cases "finite S") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4007 | case True show ?thesis | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4008 | by (induct rule: finite_induct [OF True]) simp_all | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4009 | qed simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4010 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4011 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4012 | subsubsection \<open>Derivatives of integrals and vice versa\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4013 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4014 | lemma fls_integral_fls_deriv: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4015 |   fixes a :: "'a::{division_ring,ring_char_0} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4016 | shows "fls_integral (fls_deriv a) + fls_const (a$$0) = a" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4017 | by (intro fls_eqI) (simp add: mult.assoc[symmetric]) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4018 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4019 | lemma fls_deriv_fls_integral: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4020 |   fixes   a :: "'a::{division_ring,ring_char_0} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4021 | assumes "fls_residue a = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4022 | shows "fls_deriv (fls_integral a) = a" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4023 | proof (intro fls_eqI) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4024 | fix n :: int | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4025 | show "fls_deriv (fls_integral a) $$ n = a $$ n" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4026 | proof (cases "n=-1") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4027 | case True with assms show ?thesis by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4028 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4029 | case False | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4030 | hence "(of_int (n+1) :: 'a) \<noteq> 0" using of_int_eq_0_iff[of "n+1"] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4031 | hence "(of_int (n+1) :: 'a) * inverse (of_int (n+1) :: 'a) = (1::'a)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4032 | using of_int_eq_0_iff[of "n+1"] by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4033 | moreover have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4034 | "fls_deriv (fls_integral a) $$ n = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4035 | (if n=-1 then 0 else of_int (n+1) * inverse (of_int (n+1)) * a$$n)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4036 | by (simp add: mult.assoc) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4037 | ultimately show ?thesis | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4038 | by (simp add: False) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4039 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4040 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4041 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4042 | text \<open>Series with zero residue are precisely the derivatives.\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4043 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4044 | lemma fls_residue_nonzero_ex_antiderivative: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4045 |   fixes   f :: "'a::{division_ring,ring_char_0} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4046 | assumes "fls_residue f = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4047 | shows "\<exists>F. fls_deriv F = f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4048 | using assms fls_deriv_fls_integral | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4049 | by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4050 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4051 | lemma fls_ex_antiderivative_residue_nonzero: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4052 | assumes "\<exists>F. fls_deriv F = f" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4053 | shows "fls_residue f = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4054 | using assms fls_residue_deriv | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4055 | by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4056 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4057 | lemma fls_residue_nonzero_ex_anitderivative_iff: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4058 |   fixes f :: "'a::{division_ring,ring_char_0} fls"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4059 | shows "fls_residue f = 0 \<longleftrightarrow> (\<exists>F. fls_deriv F = f)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4060 | using fls_residue_nonzero_ex_antiderivative fls_ex_antiderivative_residue_nonzero | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4061 | by fast | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4062 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4063 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4064 | subsection \<open>Topology\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4065 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4066 | instantiation fls :: (group_add) metric_space | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4067 | begin | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4068 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4069 | definition | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4070 | dist_fls_def: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4071 | "dist (a :: 'a fls) b = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4072 | (if a = b | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4073 | then 0 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4074 | else if fls_subdegree (a-b) \<ge> 0 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4075 | then inverse (2 ^ nat (fls_subdegree (a-b))) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4076 | else 2 ^ nat (-fls_subdegree (a-b)) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4077 | )" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4078 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4079 | lemma dist_fls_ge0: "dist (a :: 'a fls) b \<ge> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4080 | by (simp add: dist_fls_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4081 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4082 | definition uniformity_fls_def [code del]: | 
| 70337 
48609a6af1a0
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69792diff
changeset | 4083 |   "(uniformity :: ('a fls \<times> 'a fls) filter) = (INF e \<in> {0 <..}. principal {(x, y). dist x y < e})"
 | 
| 69791 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4084 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4085 | definition open_fls_def' [code del]: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4086 | "open (U :: 'a fls set) \<longleftrightarrow> (\<forall>x\<in>U. eventually (\<lambda>(x', y). x' = x \<longrightarrow> y \<in> U) uniformity)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4087 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4088 | lemma dist_fls_sym: "dist (a :: 'a fls) b = dist b a" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4089 | by (cases "a\<noteq>b", cases "fls_subdegree (a-b) \<ge> 0") | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4090 | (simp_all add: fls_subdegree_minus_sym dist_fls_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4091 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4092 | context | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4093 | begin | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4094 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4095 | private lemma instance_helper: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4096 | fixes a b c :: "'a fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4097 | assumes neq: "a\<noteq>b" "a\<noteq>c" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4098 | and dist_ineq: "dist a b > dist a c" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4099 | shows "fls_subdegree (a - b) < fls_subdegree (a - c)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4100 | proof ( | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4101 | cases "fls_subdegree (a-b) \<ge> 0" "fls_subdegree (a-c) \<ge> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4102 | rule: case_split[case_product case_split] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4103 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4104 | case True_True with neq dist_ineq show ?thesis by (simp add: dist_fls_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4105 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4106 | case False_True with dist_ineq show ?thesis by (simp add: dist_fls_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4107 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4108 | case False_False with neq dist_ineq show ?thesis by (simp add: dist_fls_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4109 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4110 | case True_False | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4111 | with neq | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4112 | have "(1::real) > 2 ^ (nat (fls_subdegree (a-b)) + nat (-fls_subdegree (a-c)))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4113 | and "nat (fls_subdegree (a-b)) + nat (-fls_subdegree (a-c)) = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4114 | nat (fls_subdegree (a-b) - fls_subdegree (a-c))" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4115 | using dist_ineq | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4116 | by (simp_all add: dist_fls_def field_simps power_add) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4117 | hence "\<not> (1::real) < 2 ^ (nat (fls_subdegree (a-b) - fls_subdegree (a-c)))" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4118 | hence "\<not> (0 < nat (fls_subdegree (a - b) - fls_subdegree (a - c)))" by auto | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4119 | hence "fls_subdegree (a - b) \<le> fls_subdegree (a - c)" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4120 | with True_False show ?thesis by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4121 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4122 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4123 | instance | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4124 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4125 | show th: "dist a b = 0 \<longleftrightarrow> a = b" for a b :: "'a fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4126 | by (simp add: dist_fls_def split: if_split_asm) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4127 | then have th'[simp]: "dist a a = 0" for a :: "'a fls" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4128 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4129 | fix a b c :: "'a fls" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4130 | consider "a = b" | "c = a \<or> c = b" | "a \<noteq> b" "a \<noteq> c" "b \<noteq> c" by blast | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4131 | then show "dist a b \<le> dist a c + dist b c" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4132 | proof cases | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4133 | case 1 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4134 | then show ?thesis by (simp add: dist_fls_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4135 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4136 | case 2 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4137 | then show ?thesis | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4138 | by (cases "c = a") (simp_all add: th dist_fls_sym) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4139 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4140 | case neq: 3 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4141 | have False if "dist a b > dist a c + dist b c" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4142 | proof - | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4143 | from neq have "dist a b > 0" "dist b c > 0" "dist a c > 0" by (simp_all add: dist_fls_def) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4144 | with that have dist_ineq: "dist a b > dist a c" "dist a b > dist b c" by simp_all | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4145 | have "fls_subdegree (a - b) < fls_subdegree (a - c)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4146 | and "fls_subdegree (a - b) < fls_subdegree (b - c)" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4147 | using instance_helper[of a b c] instance_helper[of b a c] neq dist_ineq | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4148 | by (simp_all add: dist_fls_sym fls_subdegree_minus_sym) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4149 | hence "(a - c) $$ fls_subdegree (a - b) = 0" and "(b - c) $$ fls_subdegree (a - b) = 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4150 | by (simp_all only: fls_eq0_below_subdegree) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4151 | hence "(a - b) $$ fls_subdegree (a - b) = 0" by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4152 | moreover from neq have "(a - b) $$ fls_subdegree (a - b) \<noteq> 0" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4153 | by (intro nth_fls_subdegree_nonzero) simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4154 | ultimately show False by contradiction | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4155 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4156 | thus ?thesis by (auto simp: not_le[symmetric]) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4157 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4158 | qed (rule open_fls_def' uniformity_fls_def)+ | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4159 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4160 | end | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4161 | end | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4162 | |
| 69792 
d21789843f01
Resolved codegen problem with uniformity for formal Laurent series
 Manuel Eberl <eberlm@in.tum.de> parents: 
69791diff
changeset | 4163 | declare uniformity_Abort[where 'a="'a :: group_add fls", code] | 
| 
d21789843f01
Resolved codegen problem with uniformity for formal Laurent series
 Manuel Eberl <eberlm@in.tum.de> parents: 
69791diff
changeset | 4164 | |
| 69791 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4165 | lemma open_fls_def: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4166 |   "open (S :: 'a::group_add fls set) = (\<forall>a \<in> S. \<exists>r. r >0 \<and> {y. dist y a < r} \<subseteq> S)"
 | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4167 | unfolding open_dist subset_eq by simp | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4168 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4169 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4170 | subsection \<open>Notation bundle\<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4171 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4172 | no_notation fls_nth (infixl "$$" 75) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4173 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4174 | bundle fls_notation | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4175 | begin | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4176 | notation fls_nth (infixl "$$" 75) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4177 | end | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4178 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4179 | end |