| author | wenzelm | 
| Fri, 05 Jul 2024 12:53:45 +0200 | |
| changeset 80509 | 2a9abd6a164e | 
| parent 80175 | 200107cdd3ac | 
| child 80914 | d97fdabd9e2b | 
| 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 | |
| 80084 
173548e4d5d0
moved over material from the AFP to HOL, HOL-Computational_Algebra, and HOL-Number_Theory
 Manuel Eberl <manuel@pruvisto.org> parents: 
80061diff
changeset | 33 | lemma fls_eq_iff: "f = g \<longleftrightarrow> (\<forall>n. f $$ n = g $$ n)" | 
| 69791 
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 | |
| 80061 
4c1347e172b1
moved over material from AFP; most importantly on algebraic numbers and algebraically closed fields
 Manuel Eberl <eberlm@in.tum.de> parents: 
78751diff
changeset | 82 | subsubsection \<open>Definition of basic Laurent series\<close> | 
| 69791 
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 | |
| 80084 
173548e4d5d0
moved over material from the AFP to HOL, HOL-Computational_Algebra, and HOL-Number_Theory
 Manuel Eberl <manuel@pruvisto.org> parents: 
80061diff
changeset | 139 | lemma fls_const_eq_0_iff [simp]: "fls_const c = 0 \<longleftrightarrow> c = 0" | 
| 
173548e4d5d0
moved over material from the AFP to HOL, HOL-Computational_Algebra, and HOL-Number_Theory
 Manuel Eberl <manuel@pruvisto.org> parents: 
80061diff
changeset | 140 | by (auto simp: fls_eq_iff) | 
| 
173548e4d5d0
moved over material from the AFP to HOL, HOL-Computational_Algebra, and HOL-Number_Theory
 Manuel Eberl <manuel@pruvisto.org> parents: 
80061diff
changeset | 141 | |
| 69791 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 142 | 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 | 143 | 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 | 144 | |
| 80084 
173548e4d5d0
moved over material from the AFP to HOL, HOL-Computational_Algebra, and HOL-Number_Theory
 Manuel Eberl <manuel@pruvisto.org> parents: 
80061diff
changeset | 145 | lemma fls_const_eq_1_iff [simp]: "fls_const c = 1 \<longleftrightarrow> c = 1" | 
| 
173548e4d5d0
moved over material from the AFP to HOL, HOL-Computational_Algebra, and HOL-Number_Theory
 Manuel Eberl <manuel@pruvisto.org> parents: 
80061diff
changeset | 146 | by (auto simp: fls_eq_iff) | 
| 
173548e4d5d0
moved over material from the AFP to HOL, HOL-Computational_Algebra, and HOL-Number_Theory
 Manuel Eberl <manuel@pruvisto.org> parents: 
80061diff
changeset | 147 | |
| 69791 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 148 | 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 | 149 | 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 | 150 | 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 | 151 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 152 | 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 | 153 | "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 | 154 | 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 | 155 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 156 | 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 | 157 | 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 | 158 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 159 | 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 | 160 | 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 | 161 | 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 | 162 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 163 | 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 | 164 | "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 | 165 | 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 | 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 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 | 168 | 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 | 169 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 170 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 171 | 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 | 172 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 173 | 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 | 174 | 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 | 175 | 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 | 176 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 177 | 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 | 178 | 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 | 179 | 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 | 180 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 181 | 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 | 182 | 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 | 183 | 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 | 184 | 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 | 185 | 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 | 186 | 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 | 187 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 188 | 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 | 189 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 190 | 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 | 191 | 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 | 192 | 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 | 193 | 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 | 194 | 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 | 195 | 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 | 196 | 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 | 197 | 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 | 198 | 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 | 199 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 200 | 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 | 201 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 202 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 203 | 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 | 204 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 205 | 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 | 206 | 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 | 207 | 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 | 208 | 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 | 209 | 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 | 210 | 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 | 211 | 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 | 212 | 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 | 213 | 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 | 214 | 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 | 215 | 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 | 216 | 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 | 217 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 218 | 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 | 219 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 220 | 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 | 221 | 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 | 222 | 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 | 223 | 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 | 224 | 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 | 225 | 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 | 226 | 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 | 227 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 228 | 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 | 229 | 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 | 230 | qed | 
| 
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 | 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 | 233 | 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 | 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 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 | 236 | 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 | 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 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 | 239 | 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 | 240 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 241 | 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 | 242 | 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 | 243 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 244 | 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 | 245 | 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 | 246 | 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 | 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_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 | 249 | 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 | 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_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 | 252 | 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 | 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_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 | 255 | 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 | 256 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 257 | 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 | 258 | 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 | 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_greaterI: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 261 | 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 | 262 | 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 | 263 | 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 | 264 | 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 | 265 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 266 | 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 | 267 | 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 | 268 | 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 | 269 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 270 | 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 | 271 | "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 | 272 | 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 | 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_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 | 275 | 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 | 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_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 | 278 | 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 | 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_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 | 281 | 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 | 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_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 | 284 | 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 | 285 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 286 | 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 | 287 | 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 | 288 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 289 | 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 | 290 | 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 | 291 | 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 | 292 | 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 | 293 | 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 | 294 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 295 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 296 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 297 | 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 | 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 | 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 | 300 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 301 | 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 | 302 | 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 | 303 | \<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 | 304 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 305 | 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 | 306 | 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 | 307 | 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 | 308 | 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 | 309 | 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 | 310 | 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 | 311 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 312 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 313 | 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 | 314 | 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 | 315 | 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 | 316 | 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 | 317 | 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 | 318 | 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 | 319 | 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 | 320 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 321 | 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 | 322 | 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 | 323 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 324 | 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 | 325 | "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 | 326 | 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 | 327 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 328 | 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 | 329 | 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 | 330 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 331 | 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 | 332 | "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 | 333 | 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 | 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_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 | 336 | 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 | 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_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 | 339 | 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 | 340 | |
| 77275 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 341 | lemma fls_shift_eq_1_iff: "fls_shift n f = 1 \<longleftrightarrow> f = fls_shift (-n) 1" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 342 | by (metis add_minus_cancel fls_shift_eq_iff fls_shift_fls_shift) | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 343 | |
| 69791 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 344 | 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 | 345 | 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 | 346 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 347 | 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 | 348 | "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 | 349 | 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 | 350 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 351 | 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 | 352 | "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 | 353 | 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 | 354 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 355 | 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 | 356 | "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 | 357 | 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 | 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_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 | 360 | 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 | 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_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 | 363 | 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 | 364 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 365 | 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 | 366 | 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 | 367 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 368 | 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 | 369 | 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 | 370 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 371 | 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 | 372 | "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 | 373 | 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 | 374 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 375 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 376 | 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 | 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 | 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 | 379 |   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 | 380 | 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 | 381 |   (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 | 382 |   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 | 383 |   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 | 384 |   @{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 | 385 | \<close> | 
| 
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 | 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 | 388 | 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 | 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_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 | 391 | 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 | 392 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 393 | 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 | 394 | 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 | 395 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 396 | 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 | 397 | 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 | 398 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 399 | 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 | 400 | "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 | 401 | 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 | 402 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 403 | 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 | 404 | "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 | 405 | 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 | 406 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 407 | 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 | 408 | "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 | 409 | 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 | 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_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 | 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_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 | 415 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 416 | 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 | 417 | 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 | 418 | 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 | 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_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 | 421 | 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 | 422 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 423 | 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 | 424 | 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 | 425 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 426 | 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 | 427 | 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 | 428 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 429 | 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 | 430 | "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 | 431 | 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 | 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 | 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 | 434 | 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 | 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 | 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 | 437 | 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 | 438 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 439 | 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 | 440 | 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 | 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 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 443 | 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 | 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 | 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 | 446 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 447 | 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 | 448 | 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 | 449 | \<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 450 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 451 | 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 | 452 | 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 | 453 | . | 
| 
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_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 | 456 | 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 | 457 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 458 | 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 | 459 | 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 | 460 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 461 | 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 | 462 | 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 | 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_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 | 465 | "\<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 | 466 | 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 | 467 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 468 | 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 | 469 | "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 | 470 | (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 | 471 | 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 | 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_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 | 474 | 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 | 475 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 476 | 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 | 477 | 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 | 478 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 479 | 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 | 480 | 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 | 481 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 482 | 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 | 483 | 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 | 484 | 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 | 485 | 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 | 486 | 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 | 487 | 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 | 488 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 489 | 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 | 490 | 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 | 491 | 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 | 492 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 493 | 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 | 494 | 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 | 495 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 496 | 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 | 497 | "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 | 498 | 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 | 499 | 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 | 500 | (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 | 501 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 502 | 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 | 503 | 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 | 504 | 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 | 505 | \<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 | 506 | 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 | 507 | 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 | 508 | \<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 509 | 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 | 510 | 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 | 511 | 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 | 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_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 | 514 | 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 | 515 | 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 | 516 | 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 | 517 | 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 | 518 | 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 | 519 | 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 | 520 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 521 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 522 | 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 | 523 | "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 | 524 | 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 | 525 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 526 | 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 | 527 | "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 | 528 | 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 | 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 | 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 | 531 | "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 | 532 | 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 | 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 | 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 | 535 | 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 | 536 | 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 | 537 | \<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 538 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 539 | 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 | 540 | 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 | 541 | . | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 542 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 543 | 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 | 544 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 545 |   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 | 546 | 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 | 547 |   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 | 548 | 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 | 549 | 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 | 550 | 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 | 551 | 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 | 552 | 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 | 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 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 555 | 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 | 556 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 557 | 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 | 558 | 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 | 559 | 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 | 560 | 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 | 561 | 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 | 562 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 563 | 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 | 564 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 565 | 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 | 566 | 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 | 567 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 568 | 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 | 569 | 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 | 570 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 571 | 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 | 572 | "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 | 573 | (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 | 574 | 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 | 575 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 576 | 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 | 577 | 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 | 578 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 579 | 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 | 580 | 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 | 581 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 582 | 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 | 583 | 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 | 584 | 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 | 585 | 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 | 586 | 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 | 587 | 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 | 588 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 589 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 590 | 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 | 591 | "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 | 592 | 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 | 593 | 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 | 594 | 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 | 595 | 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 | 596 | 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 | 597 | 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 | 598 | 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 | 599 | 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 | 600 | 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 | 601 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 602 | 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 | 603 | 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 | 604 | 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 | 605 | 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 | 606 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 607 | 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 | 608 | 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 | 609 | 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 | 610 | 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 | 611 | 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 | 612 | 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 | 613 | 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 | 614 | 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 | 615 | 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 | 616 | 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 | 617 | 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 | 618 | 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 | 619 | 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 | 620 | 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 | 621 | 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 | 622 | 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 | 623 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 624 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 625 | 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 | 626 | 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 | 627 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 628 | 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 | 629 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 630 | 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 | 631 | 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 | 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_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 | 634 | 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 | 635 | 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 | 636 | 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 | 637 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 638 | 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 | 639 | "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 | 640 | 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 | 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_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 | 643 | 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 | 644 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 645 | 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 | 646 | 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 | 647 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 648 | 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 | 649 | 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 | 650 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 651 | 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 | 652 | "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 | 653 | 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 | 654 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 655 | 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 | 656 | 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 | 657 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 658 | 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 | 659 | 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 | 660 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 661 | 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 | 662 | "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 | 663 | 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 | 664 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 665 | 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 | 666 | "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 | 667 | 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 | 668 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 669 | 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 | 670 |   "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 | 671 | 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 | 672 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 673 | 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 | 674 |   "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 | 675 | 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 | 676 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 677 | 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 | 678 | "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 | 679 | 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 | 680 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 681 | 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 | 682 | "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 | 683 | 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 | 684 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 685 | 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 | 686 | "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 | 687 | 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 | 688 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 689 | 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 | 690 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 691 | 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 | 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 | 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 | 694 | 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 | 695 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 696 | 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 | 697 | "(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 | 698 | 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 | 699 | 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 | 700 | 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 | 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_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 | 703 | 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 | 704 | 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 | 705 | 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 | 706 | 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 | 707 | 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 | 708 | 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 | 709 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 710 | |
| 77275 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 711 | lemma fps_to_fls_eq_iff [simp]: "fps_to_fls f = fps_to_fls g \<longleftrightarrow> f = g" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 712 | using fps_to_fls_eq_imp_fps_eq by blast | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 713 | |
| 69791 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 714 | 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 | 715 | 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 | 716 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 717 | 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 | 718 | 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 | 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_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 | 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_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 | 724 | "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 | 725 | 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 | 726 | 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 | 727 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 728 | 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 | 729 | "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 | 730 | 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 | 731 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 732 | 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 | 733 | 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 | 734 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 735 | 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 | 736 | 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 | 737 | |
| 77275 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 738 | lemma fps_to_fls_eq_0_iff [simp]: "(fps_to_fls f = 0) \<longleftrightarrow> (f=0)" | 
| 69791 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 739 | 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 | 740 | |
| 77275 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 741 | lemma fps_to_fls_eq_1_iff [simp]: "fps_to_fls f = 1 \<longleftrightarrow> f = 1" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 742 | using fps_to_fls_eq_iff by fastforce | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 743 | |
| 69791 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 744 | 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 | 745 | 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 | 746 | 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 | 747 | 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 | 748 | 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 | 749 | 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 | 750 | 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 | 751 | 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 | 752 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 753 | 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 | 754 | 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 | 755 | 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 | 756 | 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 | 757 | 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 | 758 | 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 | 759 | 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 | 760 | 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 | 761 | 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 | 762 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 763 | 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 | 764 | 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 | 765 | 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 | 766 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 767 | 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 | 768 | 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 | 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_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 | 771 | "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 | 772 | 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 | 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_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 | 775 | 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 | 776 | 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 | 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_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 | 779 | "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 | 780 | 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 | 781 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 782 | 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 | 783 | 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 | 784 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 785 | 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 | 786 | "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 | 787 | 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 | 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_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 | 790 | "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 | 791 | 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 | 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_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 | 794 | "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 | 795 | 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 | 796 | 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 | 797 | |
| 77275 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 798 | lemma fls_as_fps: | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 799 | fixes f :: "'a :: zero fls" and n :: int | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 800 | assumes n: "n \<ge> -fls_subdegree f" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 801 | obtains f' where "f = fls_shift n (fps_to_fls f')" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 802 | proof - | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 803 | have "fls_subdegree (fls_shift (- n) f) \<ge> 0" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 804 | by (rule fls_shift_nonneg_subdegree) (use n in simp) | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 805 | hence "f = fls_shift n (fps_to_fls (fls_regpart (fls_shift (-n) f)))" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 806 | by (subst fls_regpart_to_fls_trivial) simp_all | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 807 | thus ?thesis | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 808 | by (rule that) | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 809 | qed | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 810 | |
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 811 | lemma fls_as_fps': | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 812 | fixes f :: "'a :: zero fls" and n :: int | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 813 | assumes n: "n \<ge> -fls_subdegree f" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 814 | shows "\<exists>f'. f = fls_shift n (fps_to_fls f')" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 815 | using fls_as_fps[OF assms] by metis | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 816 | |
| 69791 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 817 | abbreviation | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 818 | "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 | 819 | abbreviation | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 820 | "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 | 821 | 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 | 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 | 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 | 824 | "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 | 825 | 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 | 826 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 827 | 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 | 828 | "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 | 829 | 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 | 830 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 831 | 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 | 832 | "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 | 833 | 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 | 834 | 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 | 835 | 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 | 836 | 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 | 837 | 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 | 838 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 839 | 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 | 840 | 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 | 841 | 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 | 842 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 843 | 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 | 844 | 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 | 845 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 846 | 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 | 847 | 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 | 848 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 849 | 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 | 850 | 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 | 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 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 853 | 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 | 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 | 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 | 856 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 857 | 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 | 858 | begin | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 859 | 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 | 860 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 861 | 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 | 862 | 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 | 863 | 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 | 864 | 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 | 865 | 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 | 866 | 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 | 867 | 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 | 868 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 869 | instance .. | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 870 | end | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 871 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 872 | 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 | 873 | 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 | 874 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 875 | 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 | 876 | 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 | 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 | 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 | 879 | "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 | 880 | 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 | 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 | 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 | 883 | "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 | 884 | 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 | 885 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 886 | 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 | 887 | 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 | 888 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 889 | 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 | 890 | 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 | 891 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 892 | 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 | 893 | 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 | 894 | 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 | 895 | 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 | 896 | 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 | 897 | 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 | 898 | 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 | 899 | 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 | 900 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 901 | 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 | 902 | 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 | 903 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 904 | 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 | 905 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 906 | 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 | 907 | 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 | 908 | 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 | 909 | 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 | 910 | qed | 
| 
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 | 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 | 913 | 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 | 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 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 916 | 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 | 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 | 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 | 919 | begin | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 920 | 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 | 921 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 922 | 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 | 923 | 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 | 924 | 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 | 925 | 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 | 926 | 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 | 927 | 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 | 928 | 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 | 929 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 930 | instance .. | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 931 | end | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 932 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 933 | 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 | 934 | 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 | 935 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 936 | 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 | 937 | 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 | 938 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 939 | 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 | 940 | "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 | 941 | 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 | 942 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 943 | 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 | 944 | 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 | 945 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 946 | 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 | 947 | 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 | 948 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 949 | 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 | 950 | 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 | 951 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 952 | 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 | 953 | 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 | 954 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 955 | 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 | 956 | begin | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 957 | 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 | 958 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 959 | 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 | 960 | 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 | 961 | 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 | 962 | 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 | 963 | 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 | 964 | 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 | 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 | instance .. | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 967 | end | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 968 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 969 | 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 | 970 | 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 | 971 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 972 | 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 | 973 | 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 | 974 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 975 | 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 | 976 | 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 | 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_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 | 979 | 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 | 980 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 981 | 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 | 982 | 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 | 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 | 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 | 985 | 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 | 986 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 987 | 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 | 988 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 989 | 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 | 990 | 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 | 991 | 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 | 992 | qed | 
| 
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 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 | 995 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 996 | 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 | 997 | 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 | 998 | 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 | 999 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1000 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1001 | 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 | 1002 | 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 | 1003 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1004 | 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 | 1005 | 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 | 1006 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1007 | 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 | 1008 | 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 | 1009 | 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 | 1010 | 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 | 1011 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1012 | 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 | 1013 | 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 | 1014 | 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 | 1015 | 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 | 1016 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1017 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1018 | 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 | 1019 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1020 | 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 | 1021 | begin | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1022 | 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 | 1023 | "(*) = (\<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 | 1024 | 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 | 1025 | (- (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 | 1026 | (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 | 1027 | )" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1028 | instance .. | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1029 | end | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1030 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1031 | 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 | 1032 | 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 | 1033 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1034 | 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 | 1035 | 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 | 1036 | 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 | 1037 | 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 | 1038 | 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 | 1039 | 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 | 1040 | 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 | 1041 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1042 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1043 | 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 | 1044 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1045 | 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 | 1046 | 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 | 1047 | 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 | 1048 | 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 | 1049 | "(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 | 1050 | (\<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 | 1051 | 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 | 1052 | 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 | 1053 | 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 | 1054 | 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 | 1055 | 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 | 1056 |       "\<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 | 1057 | 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 | 1058 | 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 | 1059 | "(f * g) $$ n = (\<Sum>i=0..nat (n - dfg). f $$ (df + int i) * g $$ (n - df - int i))" | 
| 80175 
200107cdd3ac
Some new simprules – and patches for proofs
 paulson <lp15@cam.ac.uk> parents: 
80084diff
changeset | 1060 | by (simp del: of_nat_diff) | 
| 69791 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1061 | 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 | 1062 | "(\<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 | 1063 | (\<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 | 1064 | 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 | 1065 |       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 | 1066 |       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 | 1067 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1068 |         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 | 1069 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1070 |           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 | 1071 | 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 | 1072 | 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 | 1073 |           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 | 1074 | 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 | 1075 |           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 | 1076 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1077 | 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 | 1078 | 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 | 1079 | 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 | 1080 | 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 | 1081 | 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 | 1082 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1083 | have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1084 | "(\<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 | 1085 | (\<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 | 1086 | 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 | 1087 | 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 | 1088 |     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 | 1089 | 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 | 1090 | 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 | 1091 | 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 | 1092 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1093 | have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1094 | "(\<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 | 1095 | 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 | 1096 | 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 | 1097 |     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 | 1098 | 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 | 1099 | 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 | 1100 | 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 | 1101 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1102 | have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1103 | "(\<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 | 1104 | (\<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 | 1105 | 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 | 1106 | 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 | 1107 |     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 | 1108 | 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 | 1109 | 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 | 1110 | 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 | 1111 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1112 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1113 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1114 | 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 | 1115 | "(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 | 1116 | (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 | 1117 | 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 | 1118 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1119 | 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 | 1120 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1121 | 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 | 1122 | have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1123 | "(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 | 1124 | 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 | 1125 | 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 | 1126 | 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 | 1127 | "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 | 1128 | 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 | 1129 | 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 | 1130 | 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 | 1131 | 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 | 1132 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1133 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1134 | 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 | 1135 |   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 | 1136 | 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 | 1137 | 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 | 1138 | 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 | 1139 | 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 | 1140 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1141 | 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 | 1142 |   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 | 1143 | 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 | 1144 | 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 | 1145 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1146 | 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 | 1147 | 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 | 1148 | 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 | 1149 |     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 | 1150 | 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 | 1151 | 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 | 1152 | 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 | 1153 | 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 | 1154 | 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 | 1155 |     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 | 1156 | 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 | 1157 | 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 | 1158 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1159 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1160 | 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 | 1161 |   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 | 1162 | 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 | 1163 | 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 | 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_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 | 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 | 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 | 1168 | 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 | 1169 | 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 | 1170 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1171 | 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 | 1172 |   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 | 1173 | 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 | 1174 | 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 | 1175 | 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 | 1176 | 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 | 1177 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1178 | 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 | 1179 |   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 | 1180 | 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 | 1181 | 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 | 1182 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1183 | 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 | 1184 | 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 | 1185 | 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 | 1186 | 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 | 1187 | 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 | 1188 | 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 | 1189 | 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 | 1190 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1191 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1192 | 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 | 1193 | 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 | 1194 | 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 | 1195 | 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 | 1196 | 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 | 1197 | 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 | 1198 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1199 | 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 | 1200 |   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 | 1201 | 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 | 1202 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1203 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1204 | 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 | 1205 | 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 | 1206 | 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 | 1207 | hence | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1208 | "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 | 1209 | 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 | 1210 | (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 | 1211 | 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 | 1212 | 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 | 1213 | 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 | 1214 | 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 | 1215 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1216 | 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 | 1217 | 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 | 1218 | 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 | 1219 | hence | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1220 | "(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 | 1221 | 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 | 1222 | (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 | 1223 | 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 | 1224 | 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 | 1225 | 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 | 1226 | 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 | 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 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1229 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1230 | 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 | 1231 |   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 | 1232 | 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 | 1233 | 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 | 1234 | 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 | 1235 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1236 | 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 | 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 "(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 | 1239 | 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 | 1240 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1241 | 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 | 1242 |   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 | 1243 | 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 | 1244 | 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 | 1245 | 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 | 1246 | 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 | 1247 | 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 | 1248 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1249 | 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 | 1250 |   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 | 1251 | 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 | 1252 | 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 | 1253 | 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 | 1254 | 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 | 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 | 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 | 1257 | 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 | 1258 | 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 | 1259 | 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 | 1260 | (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 | 1261 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1262 | 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 | 1263 |   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 | 1264 | shows | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1265 | "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 | 1266 | 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 | 1267 | 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 | 1268 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1269 | 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 | 1270 | \<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 | 1271 |   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 | 1272 | shows | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1273 | "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 | 1274 | 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 | 1275 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1276 | 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 | 1277 |   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 | 1278 | 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 | 1279 | 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 | 1280 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1281 | 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 | 1282 | "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 | 1283 | 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 | 1284 | 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 | 1285 | 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 | 1286 | 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 | 1287 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1288 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1289 | )" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1290 | 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 | 1291 | 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 | 1292 | 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 | 1293 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1294 | 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 | 1295 | 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 | 1296 | 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 | 1297 | 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 | 1298 | "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 | 1299 | 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 | 1300 | 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 | 1301 | 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 | 1302 | 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 | 1303 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1304 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1305 | 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 | 1306 |   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 | 1307 | shows | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1308 | "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 | 1309 | 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 | 1310 | 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 | 1311 | 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 | 1312 | 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 | 1313 | 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 | 1314 | 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 | 1315 | 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 | 1316 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1317 | 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 | 1318 |   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 | 1319 | 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 | 1320 | 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 | 1321 | 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 | 1322 | 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 | 1323 | 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 | 1324 | 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 | 1325 | 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 | 1326 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1327 | 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 | 1328 | 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 | 1329 | 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 | 1330 | 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 | 1331 | 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 | 1332 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1333 | 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 | 1334 |   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 | 1335 | 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 | 1336 | 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 | 1337 | 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 | 1338 | 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 | 1339 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1340 | 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 | 1341 |   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 | 1342 | 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 | 1343 | 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 | 1344 | 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 | 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_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 | 1347 |   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 | 1348 | 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 | 1349 | 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 | 1350 | 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 | 1351 | 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 | 1352 | 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 | 1353 | 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 | 1354 | 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 | 1355 | 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 | 1356 | 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 | 1357 | 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 | 1358 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1359 | 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 | 1360 |   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 | 1361 | 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 | 1362 | 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 | 1363 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1364 | 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 | 1365 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1366 | 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 | 1367 |   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 | 1368 | 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 | 1369 | 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 | 1370 | 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 | 1371 | 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 | 1372 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1373 | 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 | 1374 |   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 | 1375 | 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 | 1376 | 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 | 1377 | 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 | 1378 | 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 | 1379 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1380 | 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 | 1381 |   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 | 1382 | 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 | 1383 | 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 | 1384 | 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 | 1385 | 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 | 1386 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1387 | 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 | 1388 |   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 | 1389 | 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 | 1390 | 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 | 1391 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1392 | 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 | 1393 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1394 | 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 | 1395 |   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 | 1396 | 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 | 1397 | 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 | 1398 | 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 | 1399 | 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 | 1400 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1401 | 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 | 1402 |   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 | 1403 | 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 | 1404 | 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 | 1405 | 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 | 1406 | 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 | 1407 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1408 | 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 | 1409 |   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 | 1410 | 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 | 1411 | 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 | 1412 | 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 | 1413 | 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 | 1414 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1415 | 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 | 1416 | 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 | 1417 | 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 | 1418 | 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 | 1419 | 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 | 1420 | 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 | 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 | 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 | 1423 | 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 | 1424 | shows | 
| 
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_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 | 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_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 | 1428 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1429 | 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 | 1430 | 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 | 1431 | 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 | 1432 | 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 | 1433 | 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 | 1434 | proof- | 
| 
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 "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 | 1436 | 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 | 1437 | 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 | 1438 | 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 | 1439 | 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 | 1440 | 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 | 1441 | 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 | 1442 | 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 | 1443 | 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 | 1444 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1445 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1446 | 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 | 1447 | 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 | 1448 | shows | 
| 
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_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 | 1450 | 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 | 1451 | 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 | 1452 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1453 | 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 | 1454 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1455 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1456 | 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 | 1457 | have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1458 | "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 | 1459 | 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 | 1460 | (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 | 1461 | 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 | 1462 | 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 | 1463 | "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 | 1464 | 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 | 1465 | (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 | 1466 | 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 | 1467 | 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 | 1468 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1469 | 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 | 1470 | "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 | 1471 | "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 | 1472 | 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 | 1473 | have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1474 | "(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 | 1475 | 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 | 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 | 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 | 1478 | 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 | 1479 | ) * 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 | 1480 | 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 | 1481 | "-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 | 1482 | "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 | 1483 | 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 | 1484 | "-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 | 1485 | ] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1486 | 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 | 1487 | 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 | 1488 | "\<dots> = | 
| 
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 (-(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 | 1490 | (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 | 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 | 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 | 1493 | (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 | 1494 | 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 | 1495 | 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 | 1496 | 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 | 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 | 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 | 1499 | "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 | 1500 | "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 | 1501 | 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 | 1502 | have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1503 | "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 | 1504 | 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 | 1505 | 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 | 1506 | 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 | 1507 | 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 | 1508 | ) | 
| 
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 | " | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1511 | 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 | 1512 | "-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 | 1513 | "-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 | 1514 | "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 | 1515 | 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 | 1516 | ] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1517 | 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 | 1518 | 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 | 1519 | "\<dots> = | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1520 | 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 | 1521 | (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 | 1522 | + | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1523 | 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 | 1524 | (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 | 1525 | " | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1526 | 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 | 1527 | 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 | 1528 | 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 | 1529 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1530 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1531 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1532 | 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 | 1533 | 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 | 1534 | 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 | 1535 | 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 | 1536 | 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 | 1537 | 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 | 1538 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1539 | 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 | 1540 | 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 | 1541 | 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 | 1542 | 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 | 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 | 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 | 1545 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1546 | 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 | 1547 | 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 | 1548 | 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 | 1549 | 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 | 1550 | 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 | 1551 | 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 | 1552 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1553 | 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 | 1554 | 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 | 1555 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1556 | 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 | 1557 | 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 | 1558 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1559 | 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 | 1560 | 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 | 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 | 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 | 1563 | 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 | 1564 | 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 | 1565 | 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 | 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 | 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 | 1568 | 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 | 1569 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1570 | 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 | 1571 | "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 | 1572 | 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 | 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_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 | 1575 | "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 | 1576 | 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 | 1577 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1578 | 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 | 1579 | 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 | 1580 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1581 | 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 | 1582 | 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 | 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_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 | 1585 | "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 | 1586 | 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 | 1587 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1588 | 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 | 1589 | "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 | 1590 | proof - | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1591 | 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 | 1592 | 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 | 1593 | 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 | 1594 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1595 | |
| 78751 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 1596 | lemma fps_to_fls_numeral [simp]: "fps_to_fls (numeral n) = numeral n" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 1597 | by (metis fps_to_fls_of_nat of_nat_numeral) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 1598 | |
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 1599 | lemma fls_const_power: "fls_const (a ^ b) = fls_const a ^ b" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 1600 | by (induction b) (auto simp flip: fls_const_mult_const) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 1601 | |
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 1602 | lemma fls_const_numeral [simp]: "fls_const (numeral n) = numeral n" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 1603 | by (metis fls_of_nat of_nat_numeral) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 1604 | |
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 1605 | lemma fls_mult_of_numeral_nth [simp]: | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 1606 | shows "(numeral k * f) $$ n = numeral k * f $$ n" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 1607 | and "(f * numeral k) $$ n = f $$ n * numeral k" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 1608 | by (metis fls_const_numeral fls_mult_const_nth)+ | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 1609 | |
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 1610 | lemma fls_nth_numeral' [simp]: | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 1611 | "numeral n $$ 0 = numeral n" "k \<noteq> 0 \<Longrightarrow> numeral n $$ k = 0" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 1612 | by (metis fls_const_nth fls_const_numeral)+ | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 1613 | |
| 69791 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1614 | 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 | 1615 | 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 | 1616 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1617 | 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 | 1618 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1619 | 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 | 1620 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1621 | 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 | 1622 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1623 | 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 | 1624 | 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 | 1625 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1626 | 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 | 1627 | 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 | 1628 | 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 | 1629 | 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 | 1630 | 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 | 1631 | 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 | 1632 | 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 | 1633 | 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 | 1634 | 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 | 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 | 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 | 1637 | 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 | 1638 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1639 | 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 | 1640 | 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 | 1641 | 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 | 1642 | 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 | 1643 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1644 | 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 | 1645 | 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 | 1646 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1647 | 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 | 1648 | "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 | 1649 | 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 | 1650 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1651 | 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 | 1652 | "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 | 1653 | 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 | 1654 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1655 | 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 | 1656 | "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 | 1657 | 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 | 1658 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1659 | 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 | 1660 | 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 | 1661 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1662 | 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 | 1663 | "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 | 1664 | 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 | 1665 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1666 | 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 | 1667 | "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 | 1668 | proof - | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1669 | 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 | 1670 | 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 | 1671 | 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 | 1672 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1673 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1674 | 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 | 1675 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1676 | 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 | 1677 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1678 | 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 | 1679 | 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 | 1680 | 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 | 1681 | 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 | 1682 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1683 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1684 | 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 | 1685 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1686 | 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 | 1687 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1688 | 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 | 1689 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1690 | 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 | 1691 | |
| 80084 
173548e4d5d0
moved over material from the AFP to HOL, HOL-Computational_Algebra, and HOL-Number_Theory
 Manuel Eberl <manuel@pruvisto.org> parents: 
80061diff
changeset | 1692 | lemma semiring_char_fls [simp]: "CHAR('a :: comm_semiring_1 fls) = CHAR('a)"
 | 
| 
173548e4d5d0
moved over material from the AFP to HOL, HOL-Computational_Algebra, and HOL-Number_Theory
 Manuel Eberl <manuel@pruvisto.org> parents: 
80061diff
changeset | 1693 | by (rule CHAR_eqI) (auto simp: fls_of_nat of_nat_eq_0_iff_char_dvd fls_const_nonzero) | 
| 
173548e4d5d0
moved over material from the AFP to HOL, HOL-Computational_Algebra, and HOL-Number_Theory
 Manuel Eberl <manuel@pruvisto.org> parents: 
80061diff
changeset | 1694 | |
| 
173548e4d5d0
moved over material from the AFP to HOL, HOL-Computational_Algebra, and HOL-Number_Theory
 Manuel Eberl <manuel@pruvisto.org> parents: 
80061diff
changeset | 1695 | instance fls :: ("{semiring_prime_char,comm_semiring_1}") semiring_prime_char
 | 
| 
173548e4d5d0
moved over material from the AFP to HOL, HOL-Computational_Algebra, and HOL-Number_Theory
 Manuel Eberl <manuel@pruvisto.org> parents: 
80061diff
changeset | 1696 | by (rule semiring_prime_charI) auto | 
| 
173548e4d5d0
moved over material from the AFP to HOL, HOL-Computational_Algebra, and HOL-Number_Theory
 Manuel Eberl <manuel@pruvisto.org> parents: 
80061diff
changeset | 1697 | instance fls :: ("{comm_semiring_prime_char,comm_semiring_1}") comm_semiring_prime_char
 | 
| 
173548e4d5d0
moved over material from the AFP to HOL, HOL-Computational_Algebra, and HOL-Number_Theory
 Manuel Eberl <manuel@pruvisto.org> parents: 
80061diff
changeset | 1698 | by standard | 
| 
173548e4d5d0
moved over material from the AFP to HOL, HOL-Computational_Algebra, and HOL-Number_Theory
 Manuel Eberl <manuel@pruvisto.org> parents: 
80061diff
changeset | 1699 | instance fls :: ("{comm_ring_prime_char,comm_semiring_1}") comm_ring_prime_char
 | 
| 
173548e4d5d0
moved over material from the AFP to HOL, HOL-Computational_Algebra, and HOL-Number_Theory
 Manuel Eberl <manuel@pruvisto.org> parents: 
80061diff
changeset | 1700 | by standard | 
| 
173548e4d5d0
moved over material from the AFP to HOL, HOL-Computational_Algebra, and HOL-Number_Theory
 Manuel Eberl <manuel@pruvisto.org> parents: 
80061diff
changeset | 1701 | instance fls :: ("{idom_prime_char,comm_semiring_1}") idom_prime_char
 | 
| 
173548e4d5d0
moved over material from the AFP to HOL, HOL-Computational_Algebra, and HOL-Number_Theory
 Manuel Eberl <manuel@pruvisto.org> parents: 
80061diff
changeset | 1702 | by standard | 
| 
173548e4d5d0
moved over material from the AFP to HOL, HOL-Computational_Algebra, and HOL-Number_Theory
 Manuel Eberl <manuel@pruvisto.org> parents: 
80061diff
changeset | 1703 | |
| 69791 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1704 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1705 | 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 | 1706 | |
| 78751 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 1707 | lemma fls_subdegree_prod: | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 1708 | fixes F :: "'a \<Rightarrow> 'b :: field_char_0 fls" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 1709 | assumes "\<And>x. x \<in> I \<Longrightarrow> F x \<noteq> 0" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 1710 | shows "fls_subdegree (\<Prod>x\<in>I. F x) = (\<Sum>x\<in>I. fls_subdegree (F x))" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 1711 | using assms by (induction I rule: infinite_finite_induct) auto | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 1712 | |
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 1713 | lemma fls_subdegree_prod': | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 1714 | fixes F :: "'a \<Rightarrow> 'b :: field_char_0 fls" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 1715 | assumes "\<And>x. x \<in> I \<Longrightarrow> fls_subdegree (F x) \<noteq> 0" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 1716 | shows "fls_subdegree (\<Prod>x\<in>I. F x) = (\<Sum>x\<in>I. fls_subdegree (F x))" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 1717 | proof (intro fls_subdegree_prod) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 1718 | show "F x \<noteq> 0" if "x \<in> I" for x | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 1719 | using assms[OF that] by auto | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 1720 | qed | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 1721 | |
| 69791 
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_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 | 1723 | "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 | 1724 | 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 | 1725 | 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 | 1726 | 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 | 1727 | 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 | 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_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 | 1730 | "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 | 1731 | 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 | 1732 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1733 | 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 | 1734 | "(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 | 1735 | 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 | 1736 | 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 | 1737 | 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 | 1738 | 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 | 1739 | 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 | 1740 | 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 | 1741 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1742 | 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 | 1743 | 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 | 1744 |       "{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 | 1745 |         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 | 1746 | 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 | 1747 | 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 | 1748 | 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 | 1749 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1750 | 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 | 1751 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1752 | 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 | 1753 | "(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 | 1754 | 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 | 1755 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1756 | 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 | 1757 | "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 | 1758 | "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 | 1759 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1760 | 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 | 1761 | 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 | 1762 | 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 | 1763 | 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 | 1764 | 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 | 1765 | 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 | 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_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 | 1769 | "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 | 1770 | 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 | 1771 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1772 | 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 | 1773 | 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 | 1774 | 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 | 1775 | 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 | 1776 | 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 | 1777 | 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 | 1778 | 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 | 1779 | 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 | 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_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 | 1782 | 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 | 1783 | 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 | 1784 | 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 | 1785 | 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 | 1786 | 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 | 1787 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1788 | 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 | 1789 | "(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 | 1790 | 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 | 1791 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1792 | 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 | 1793 | 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 | 1794 | 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 | 1795 | 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 | 1796 | 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 | 1797 | 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 | 1798 | 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 | 1799 | 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 | 1800 | |
| 77275 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 1801 | lemma fps_to_fls_power: "fps_to_fls (f ^ n) = fps_to_fls f ^ n" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 1802 | by (simp add: fls_pow_conv_fps_pow fls_subdegree_fls_to_fps_gt0) | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 1803 | |
| 69791 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1804 | 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 | 1805 | "fls_subdegree f \<ge> 0 \<Longrightarrow> fls_regpart (f ^ n) = (fls_regpart f) ^ n" | 
| 77275 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 1806 | by (simp add: fls_pow_conv_fps_pow) | 
| 69791 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1807 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1808 | 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 | 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_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 | 1811 | 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 | 1812 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1813 | 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 | 1814 | 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 | 1815 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1816 | 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 | 1817 | \<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 | 1818 |   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 | 1819 |   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 | 1820 | 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 | 1821 | \<close> | 
| 
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_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 | 1824 | 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 | 1825 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1826 | 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 | 1827 | 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 | 1828 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1829 | 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 | 1830 | 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 | 1831 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1832 | 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 | 1833 | 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 | 1834 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1835 | 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 | 1836 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1837 | 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 | 1838 | 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 | 1839 | 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 | 1840 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1841 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1842 | 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 | 1843 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1844 | 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 | 1845 | 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 | 1846 | 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 | 1847 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1848 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1849 | 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 | 1850 | 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 | 1851 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1852 | 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 | 1853 | 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 | 1854 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1855 | 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 | 1856 | "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 | 1857 | 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 | 1858 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1859 | 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 | 1860 | 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 | 1861 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1862 | 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 | 1863 | 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 | 1864 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1865 | 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 | 1866 | "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 | 1867 | 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 | 1868 | 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 | 1869 | 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 | 1870 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1871 | 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 | 1872 | "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 | 1873 | 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 | 1874 | 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 | 1875 | 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 | 1876 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1877 | 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 | 1878 | "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 | 1879 | 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 | 1880 | 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 | 1881 | 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 | 1882 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1883 | 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 | 1884 | 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 | 1885 | 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 | 1886 | 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 | 1887 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1888 | 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 | 1889 | 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 | 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_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 | 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_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 | 1894 | 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 | 1895 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1896 | 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 | 1897 | "(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 | 1898 | 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 | 1899 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1900 | 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 | 1901 | "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 | 1902 | 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 | 1903 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1904 | 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 | 1905 | 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 | 1906 | 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 | 1907 | 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 | 1908 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1909 | 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 | 1910 | 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 | 1911 | 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 | 1912 | 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 | 1913 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1914 | 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 | 1915 | 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 | 1916 | 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 | 1917 | 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 | 1918 | 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 | 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_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 | 1921 | 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 | 1922 | 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 | 1923 | 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 | 1924 | 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 | 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_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 | 1927 | 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 | 1928 | 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 | 1929 | 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 | 1930 | 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 | 1931 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1932 | 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 | 1933 | 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 | 1934 | 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 | 1935 | 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 | 1936 | 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 | 1937 | 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 | 1938 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1939 | 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 | 1940 | "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 | 1941 | "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 | 1942 | 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 | 1943 | 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 | 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 | 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 | 1946 | "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 | 1947 | "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 | 1948 | 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 | 1949 | 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 | 1950 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1951 | 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 | 1952 | 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 | 1953 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1954 | 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 | 1955 | 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 | 1956 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1957 | 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 | 1958 | 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 | 1959 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1960 | 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 | 1961 | 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 | 1962 | 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 | 1963 | 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 | 1964 | 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 | 1965 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1966 | 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 | 1967 | 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 | 1968 | 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 | 1969 | 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 | 1970 | 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 | 1971 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1972 | 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 | 1973 | 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 | 1974 | 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 | 1975 | 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 | 1976 | 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 | 1977 | 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 | 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_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 | 1980 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1981 | 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 | 1982 | 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 | 1983 | 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 | 1984 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1985 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1986 | 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 | 1987 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1988 | 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 | 1989 | 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 | 1990 | 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 | 1991 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1992 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1993 | 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 | 1994 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1995 | 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 | 1996 | 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 | 1997 | 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 | 1998 | 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 | 1999 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2000 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2001 | 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 | 2002 | 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 | 2003 | 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 | 2004 | 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 | 2005 | 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 | 2006 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2007 | 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 | 2008 | 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 | 2009 | 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 | 2010 | 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 | 2011 | 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 | 2012 | 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 | 2013 | 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 | 2014 | 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 | 2015 | 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 | 2016 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2017 | 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 | 2018 | 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 | 2019 | 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 | 2020 | 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 | 2021 | 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 | 2022 | 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 | 2023 | 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 | 2024 | 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 | 2025 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2026 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2027 | 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 | 2028 | |
| 80061 
4c1347e172b1
moved over material from AFP; most importantly on algebraic numbers and algebraically closed fields
 Manuel Eberl <eberlm@in.tum.de> parents: 
78751diff
changeset | 2029 | |
| 69791 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2030 | 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 | 2031 |   "'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 | 2032 | where | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2033 | "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 | 2034 | 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 | 2035 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2036 | 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 | 2037 |   "'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 | 2038 | where | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2039 | "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 | 2040 | 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 | 2041 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2042 | 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 | 2043 | begin | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2044 | 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 | 2045 | "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 | 2046 | 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 | 2047 | 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 | 2048 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2049 | " | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2050 | 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 | 2051 | "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 | 2052 | instance .. | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2053 | end | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2054 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2055 | 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 | 2056 | "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 | 2057 | 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 | 2058 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2059 | 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 | 2060 | "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 | 2061 | "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 | 2062 | 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 | 2063 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2064 | 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 | 2065 | "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 | 2066 | 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 | 2067 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2068 | 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 | 2069 |   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 | 2070 |   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 | 2071 | 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 | 2072 | 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 | 2073 | 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 | 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_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 | 2076 | "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 | 2077 | "fls_right_inverse f x = 0 \<Longrightarrow> x = 0" | 
| 77275 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 2078 | by (metis fls_lr_inverse_base fls_nonzeroI)+ | 
| 69791 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2079 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2080 | 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 | 2081 |   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 | 2082 |   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 | 2083 | 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 | 2084 | 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 | 2085 | 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 | 2086 | 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 | 2087 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2088 | 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 | 2089 |   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 | 2090 | 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 | 2091 | 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 | 2092 | 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 | 2093 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2094 | 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 | 2095 |   "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 | 2096 | 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 | 2097 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2098 | 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 | 2099 | 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 | 2100 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2101 | 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 | 2102 |   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 | 2103 |   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 | 2104 | 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 | 2105 | 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 | 2106 | 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 | 2107 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2108 | 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 | 2109 |   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 | 2110 | 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 | 2111 | 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 | 2112 | 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 | 2113 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2114 | 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 | 2115 |   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 | 2116 |   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 | 2117 | 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 | 2118 | 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 | 2119 | 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 | 2120 | 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 | 2121 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2122 | 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 | 2123 |   "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 | 2124 | 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 | 2125 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2126 | 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 | 2127 |   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 | 2128 | 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 | 2129 | 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 | 2130 | 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 | 2131 | 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 | 2132 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2133 | 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 | 2134 |   "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 | 2135 | 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 | 2136 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2137 | 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 | 2138 |   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 | 2139 |   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 | 2140 | 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 | 2141 | 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 | 2142 | 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 | 2143 | 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 | 2144 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2145 | 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 | 2146 |   "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 | 2147 | 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 | 2148 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2149 | 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 | 2150 |   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 | 2151 | 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 | 2152 | 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 | 2153 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2154 | 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 | 2155 | 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 | 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_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 | 2158 |   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 | 2159 | 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 | 2160 | 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 | 2161 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2162 | 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 | 2163 |   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 | 2164 |   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 | 2165 | 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 | 2166 | 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 | 2167 | 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 | 2168 | 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 | 2169 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2170 | 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 | 2171 | "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 | 2172 |     (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 | 2173 | "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 | 2174 |     (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 | 2175 | 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 | 2176 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2177 | 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 | 2178 |   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 | 2179 | 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 | 2180 | 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 | 2181 | 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 | 2182 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2183 | 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 | 2184 |   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 | 2185 | 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 | 2186 | 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 | 2187 | 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 | 2188 | 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 | 2189 | 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 | 2190 | "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 | 2191 | = 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 | 2192 | 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 | 2193 | 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 | 2194 | 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 | 2195 | 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 | 2196 | qed | 
| 
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_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 | 2199 |   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 | 2200 | 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 | 2201 | 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 | 2202 | 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 | 2203 | 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 | 2204 | 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 | 2205 | "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 | 2206 | = 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 | 2207 | 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 | 2208 | 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 | 2209 | 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 | 2210 | 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 | 2211 | qed | 
| 
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_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 | 2214 |   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 | 2215 | 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 | 2216 | 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 | 2217 | 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 | 2218 | 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 | 2219 | 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 | 2220 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2221 | 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 | 2222 | 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 | 2223 | 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 | 2224 | 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 | 2225 | 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 | 2226 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2227 | 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 | 2228 |   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 | 2229 |   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 | 2230 | 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 | 2231 | 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 | 2232 | 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 | 2233 | 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 | 2234 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2235 | 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 | 2236 |   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 | 2237 |   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 | 2238 | 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 | 2239 | 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 | 2240 | 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 | 2241 | 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 | 2242 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2243 | 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 | 2244 |   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 | 2245 | 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 | 2246 | 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 | 2247 | 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 | 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_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 | 2250 | 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 | 2251 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2252 | 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 | 2253 |   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 | 2254 |   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 | 2255 | 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 | 2256 | 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 | 2257 | 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 | 2258 | 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 | 2259 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2260 | 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 | 2261 |   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 | 2262 |   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 | 2263 | 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 | 2264 | 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 | 2265 | 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 | 2266 | 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 | 2267 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2268 | 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 | 2269 |   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 | 2270 | 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 | 2271 | 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 | 2272 | 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 | 2273 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2274 | 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 | 2275 | 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 | 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_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 | 2278 | 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 | 2279 | 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 | 2280 | 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 | 2281 | 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 | 2282 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2283 | 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 | 2284 | "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 | 2285 | 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 | 2286 | 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 | 2287 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2288 | 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 | 2289 | 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 | 2290 | 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 | 2291 | 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 | 2292 | (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 | 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_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 | 2295 | 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 | 2296 | 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 | 2297 | 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 | 2298 | 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 | 2299 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2300 | 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 | 2301 |   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 | 2302 | 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 | 2303 | 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 | 2304 | 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 | 2305 | (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 | 2306 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2307 | 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 | 2308 | 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 | 2309 | 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 | 2310 | 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 | 2311 | 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 | 2312 | 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 | 2313 | 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 | 2314 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2315 | 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 | 2316 | "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 | 2317 | 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 | 2318 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2319 | 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 | 2320 |   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 | 2321 | 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 | 2322 | 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 | 2323 | 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 | 2324 | 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 | 2325 | 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 | 2326 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2327 | 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 | 2328 |   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 | 2329 | 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 | 2330 | 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 | 2331 | 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 | 2332 | 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 | 2333 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2334 | 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 | 2335 | 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 | 2336 | 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 | 2337 | 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 | 2338 | 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 | 2339 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2340 | 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 | 2341 |   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 | 2342 | 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 | 2343 | 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 | 2344 | 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 | 2345 | 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 | 2346 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2347 | 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 | 2348 |   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 | 2349 | 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 | 2350 | 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 | 2351 | 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 | 2352 | 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 | 2353 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2354 | 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 | 2355 |   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 | 2356 | 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 | 2357 | 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 | 2358 | 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 | 2359 | (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 | 2360 | 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 | 2361 | 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 | 2362 | ) | 
| 
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 | 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 | 2365 |   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 | 2366 | 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 | 2367 | 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 | 2368 | 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 | 2369 | 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 | 2370 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2371 | 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 | 2372 | 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 | 2373 | 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 | 2374 | 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 | 2375 | 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 | 2376 | 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 | 2377 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2378 | 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 | 2379 | 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 | 2380 | 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 | 2381 | 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 | 2382 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2383 | 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 | 2384 |   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 | 2385 | 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 | 2386 | 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 | 2387 | 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 | 2388 | 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 | 2389 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2390 | 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 | 2391 |   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 | 2392 | 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 | 2393 | 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 | 2394 | 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 | 2395 | 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 | 2396 | 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 | 2397 | 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 | 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_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 | 2400 |   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 | 2401 | 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 | 2402 | 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 | 2403 | 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 | 2404 | 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 | 2405 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2406 | 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 | 2407 |   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 | 2408 | 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 | 2409 | 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 | 2410 | 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 | 2411 | 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 | 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_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 | 2414 |   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 | 2415 | 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 | 2416 | 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 | 2417 | 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 | 2418 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2419 | 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 | 2420 | 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 | 2421 | 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 | 2422 | 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 | 2423 | 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 | 2424 | 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 | 2425 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2426 | 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 | 2427 | "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 | 2428 | 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 | 2429 | 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 | 2430 | (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 | 2431 | 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 | 2432 | 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 | 2433 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2434 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2435 | 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 | 2436 | 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 | 2437 |   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 | 2438 | 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 | 2439 | 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 | 2440 | 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 | 2441 | 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 | 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_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 | 2444 | 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 | 2445 |   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 | 2446 | 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 | 2447 | 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 | 2448 | 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 | 2449 | 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 | 2450 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2451 | 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 | 2452 |   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 | 2453 | 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 | 2454 | 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 | 2455 | 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 | 2456 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2457 | 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 | 2458 | "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 | 2459 | 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 | 2460 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2461 | 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 | 2462 | 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 | 2463 |   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 | 2464 | 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 | 2465 | 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 | 2466 | 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 | 2467 | 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 | 2468 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2469 | 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 | 2470 | 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 | 2471 |   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 | 2472 | 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 | 2473 | 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 | 2474 | 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 | 2475 | 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 | 2476 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2477 | 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 | 2478 |   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 | 2479 | 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 | 2480 | 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 | 2481 | 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 | 2482 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2483 | 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 | 2484 | "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 | 2485 | 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 | 2486 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2487 | 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 | 2488 | 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 | 2489 |   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 | 2490 | 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 | 2491 | 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 | 2492 | 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 | 2493 | 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 | 2494 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2495 | 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 | 2496 | 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 | 2497 |   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 | 2498 | 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 | 2499 | 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 | 2500 | 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 | 2501 | 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 | 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_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 | 2504 |   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 | 2505 | 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 | 2506 | 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 | 2507 | 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 | 2508 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2509 | 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 | 2510 | "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 | 2511 | 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 | 2512 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2513 | 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 | 2514 | 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 | 2515 | 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 | 2516 | 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 | 2517 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2518 | 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 | 2519 | 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 | 2520 | 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 | 2521 | 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 | 2522 | 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 | 2523 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2524 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2525 | 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 | 2526 | 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 | 2527 | 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 | 2528 | 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 | 2529 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2530 | 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 | 2531 | 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 | 2532 | 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 | 2533 | 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 | 2534 | 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 | 2535 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2536 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2537 | \<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 | 2538 | 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 | 2539 | 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 | 2540 | \<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2541 | 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 | 2542 | 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 | 2543 | 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 | 2544 | \<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 | 2545 | 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 | 2546 | 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 | 2547 | 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 | 2548 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2549 | 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 | 2550 | 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 | 2551 | 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 | 2552 | 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 | 2553 | 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 | 2554 | 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 | 2555 | 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 | 2556 | 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 | 2557 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2558 | 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 | 2559 | 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 | 2560 | 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 | 2561 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2562 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2563 | 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 | 2564 | 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 | 2565 | 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 | 2566 | 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 | 2567 | 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 | 2568 | 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 | 2569 | 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 | 2570 | 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 | 2571 | 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 | 2572 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2573 | 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 | 2574 | 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 | 2575 | 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 | 2576 | 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 | 2577 | 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 | 2578 | 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 | 2579 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2580 | 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 | 2581 | 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 | 2582 | 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 | 2583 | \<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 | 2584 | 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 | 2585 | 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 | 2586 | 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 | 2587 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2588 | 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 | 2589 | 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 | 2590 | 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 | 2591 | \<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 | 2592 | 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 | 2593 | 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 | 2594 | 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 | 2595 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2596 | 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 | 2597 | 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 | 2598 | 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 | 2599 | 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 | 2600 | 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 | 2601 | 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 | 2602 | 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 | 2603 | 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 | 2604 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2605 | 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 | 2606 | 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 | 2607 | 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 | 2608 | 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 | 2609 | 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 | 2610 | 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 | 2611 | 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 | 2612 | 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 | 2613 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2614 | 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 | 2615 | 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 | 2616 | 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 | 2617 | 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 | 2618 | 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 | 2619 | 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 | 2620 | 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 | 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 | 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 | 2623 | 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 | 2624 | assumes "x * f $$ fls_subdegree f = 1" "y * x = 1" | 
| 80061 
4c1347e172b1
moved over material from AFP; most importantly on algebraic numbers and algebraically closed fields
 Manuel Eberl <eberlm@in.tum.de> parents: 
78751diff
changeset | 2625 | \<comment> \<open>These assumptions imply y equals \<open>f $$ fls_subdegree f\<close>, but no need to assume that.\<close> | 
| 69791 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2626 | 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 | 2627 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2628 | 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 | 2629 | "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 | 2630 | 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 | 2631 | 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 | 2632 | 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 | 2633 | 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 | 2634 | "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 | 2635 | 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 | 2636 | 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 | 2637 | 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 | 2638 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2639 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2640 | 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 | 2641 | 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 | 2642 | 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 | 2643 | 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 | 2644 | 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 | 2645 | 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 | 2646 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2647 | 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 | 2648 | 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 | 2649 | assumes "f $$ fls_subdegree f * x = 1" "x * y = 1" | 
| 80061 
4c1347e172b1
moved over material from AFP; most importantly on algebraic numbers and algebraically closed fields
 Manuel Eberl <eberlm@in.tum.de> parents: 
78751diff
changeset | 2650 | \<comment> \<open>These assumptions imply y equals \<open>f $$ fls_subdegree f\<close>, but no need to assume that.\<close> | 
| 69791 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2651 | 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 | 2652 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2653 | 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 | 2654 | "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 | 2655 | 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 | 2656 | 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 | 2657 | 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 | 2658 | 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 | 2659 | "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 | 2660 | 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 | 2661 | 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 | 2662 | 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 | 2663 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2664 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2665 | 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 | 2666 | 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 | 2667 | 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 | 2668 | 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 | 2669 | 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 | 2670 | 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 | 2671 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2672 | 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 | 2673 | 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 | 2674 | 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 | 2675 | 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 | 2676 | 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 | 2677 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2678 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2679 | 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 | 2680 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2681 | 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 | 2682 | 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 | 2683 | 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 | 2684 | 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 | 2685 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2686 | 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 | 2687 | 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 | 2688 | 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 | 2689 | "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 | 2690 | 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 | 2691 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2692 | 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 | 2693 | 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 | 2694 | "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 | 2695 | = 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 | 2696 | 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 | 2697 | 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 | 2698 | "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 | 2699 | 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 | 2700 | 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 | 2701 | 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 | 2702 | 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 | 2703 | "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 | 2704 | 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 | 2705 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2706 | 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 | 2707 | 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 | 2708 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2709 | 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 | 2710 | 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 | 2711 | "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 | 2712 | = 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 | 2713 | 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 | 2714 | 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 | 2715 | "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 | 2716 | 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 | 2717 | 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 | 2718 | 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 | 2719 | 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 | 2720 | "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 | 2721 | 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 | 2722 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2723 | 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 | 2724 | 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 | 2725 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2726 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2727 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2728 | 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 | 2729 | 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 | 2730 | 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 | 2731 | 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 | 2732 | 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 | 2733 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2734 | 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 | 2735 | 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 | 2736 | 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 | 2737 | 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 | 2738 | 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 | 2739 | 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 | 2740 | 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 | 2741 | thus | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2742 | "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 | 2743 | "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 | 2744 | 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 | 2745 | 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 | 2746 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2747 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2748 | 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 | 2749 | 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 | 2750 | 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 | 2751 | 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 | 2752 | 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 | 2753 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2754 | 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 | 2755 | 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 | 2756 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2757 | 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 | 2758 | 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 | 2759 | 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 | 2760 | 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 | 2761 | 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 | 2762 | 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 | 2763 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2764 | 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 | 2765 | 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 | 2766 | 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 | 2767 | 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 | 2768 | 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 | 2769 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2770 | 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 | 2771 | "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 | 2772 | 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 | 2773 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2774 | have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2775 | "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 | 2776 | 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 | 2777 | 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 | 2778 | 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 | 2779 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2780 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2781 | " | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2782 | 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 | 2783 | 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 | 2784 | 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 | 2785 | 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 | 2786 | 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 | 2787 | 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 | 2788 | ] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2789 | 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 | 2790 | 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 | 2791 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2792 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2793 | have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2794 | "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 | 2795 | 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 | 2796 | 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 | 2797 | 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 | 2798 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2799 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2800 | " | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2801 | 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 | 2802 | 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 | 2803 | 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 | 2804 | 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 | 2805 | 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 | 2806 | 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 | 2807 | ] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2808 | 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 | 2809 | 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 | 2810 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2811 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2812 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2813 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2814 | 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 | 2815 | 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 | 2816 | 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 | 2817 | 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 | 2818 | "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 | 2819 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2820 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2821 | 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 | 2822 | 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 | 2823 | 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 | 2824 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2825 | 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 | 2826 | 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 | 2827 | 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 | 2828 | 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 | 2829 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2830 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2831 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2832 | 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 | 2833 | 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 | 2834 | 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 | 2835 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2836 | 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 | 2837 | 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 | 2838 | 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 | 2839 | 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 | 2840 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2841 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2842 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2843 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2844 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2845 | 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 | 2846 |   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 | 2847 | 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 | 2848 | 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 | 2849 | 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 | 2850 | 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 | 2851 | 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 | 2852 | 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 | 2853 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2854 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2855 | 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 | 2856 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2857 | 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 | 2858 | 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 | 2859 | 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 | 2860 | 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 | 2861 | 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 | 2862 | 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 | 2863 | 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 | 2864 | 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 | 2865 | 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 | 2866 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2867 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2868 | 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 | 2869 | 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 | 2870 | 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 | 2871 | 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 | 2872 | 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 | 2873 | 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 | 2874 | 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 | 2875 | 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 | 2876 | 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 | 2877 | proof - | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2878 | show | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2879 | "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 | 2880 | 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 | 2881 | 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 | 2882 | 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 | 2883 | 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 | 2884 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2885 | 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 | 2886 | 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 | 2887 | 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 | 2888 | 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 | 2889 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2890 | show | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2891 | "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 | 2892 | 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 | 2893 | 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 | 2894 | 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 | 2895 | 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 | 2896 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2897 | 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 | 2898 | 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 | 2899 | 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 | 2900 | 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 | 2901 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2902 | qed | 
| 
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_lr_inverse_power_divring: | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70337diff
changeset | 2905 | "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 | 2906 | (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 | 2907 | 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 | 2908 | (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 | 2909 | 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 | 2910 | proof - | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70337diff
changeset | 2911 | 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 | 2912 | 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 | 2913 | "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 | 2914 | inverse f ^ n" | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70337diff
changeset | 2915 | using fls_right_inverse_eq_inverse [of "f ^ n"] | 
| 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70337diff
changeset | 2916 | by (simp add: fls_subdegree_pow power_inverse) | 
| 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70337diff
changeset | 2917 | 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 | 2918 | "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 | 2919 | inverse f ^ n" | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70337diff
changeset | 2920 | using fls_left_inverse_eq_inverse [of "f ^ n"] | 
| 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70337diff
changeset | 2921 | by (simp add: fls_subdegree_pow power_inverse) | 
| 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70337diff
changeset | 2922 | ultimately show ?P and ?Q | 
| 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70337diff
changeset | 2923 | 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 | 2924 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2925 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2926 | 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 | 2927 | 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 | 2928 | |
| 80084 
173548e4d5d0
moved over material from the AFP to HOL, HOL-Computational_Algebra, and HOL-Number_Theory
 Manuel Eberl <manuel@pruvisto.org> parents: 
80061diff
changeset | 2929 | instance fls :: ("{field_prime_char,comm_semiring_1}") field_prime_char
 | 
| 
173548e4d5d0
moved over material from the AFP to HOL, HOL-Computational_Algebra, and HOL-Number_Theory
 Manuel Eberl <manuel@pruvisto.org> parents: 
80061diff
changeset | 2930 | by (rule field_prime_charI') auto | 
| 
173548e4d5d0
moved over material from the AFP to HOL, HOL-Computational_Algebra, and HOL-Number_Theory
 Manuel Eberl <manuel@pruvisto.org> parents: 
80061diff
changeset | 2931 | |
| 69791 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2932 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2933 | 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 | 2934 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2935 | 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 | 2936 |   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 | 2937 | 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 | 2938 | 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 | 2939 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2940 | 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 | 2941 | 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 | 2942 | shows | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2943 | "(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 | 2944 | 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 | 2945 | 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 | 2946 | 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 | 2947 | 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 | 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_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 | 2950 |   "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 | 2951 | 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 | 2952 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2953 | 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 | 2954 |   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 | 2955 | 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 | 2956 | 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 | 2957 | 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 | 2958 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2959 | 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 | 2960 |   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 | 2961 | 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 | 2962 | 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 | 2963 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2964 | 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 | 2965 |   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 | 2966 | 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 | 2967 | 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 | 2968 | 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 | 2969 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2970 | 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 | 2971 |   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 | 2972 | 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 | 2973 | 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 | 2974 | 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 | 2975 | 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 | 2976 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2977 | 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 | 2978 | 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 | 2979 | 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 | 2980 | 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 | 2981 | 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 | 2982 | 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 | 2983 | 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 | 2984 | 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 | 2985 | 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 | 2986 | 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 | 2987 | 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 | 2988 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2989 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2990 | 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 | 2991 |   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 | 2992 | 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 | 2993 | 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 | 2994 | 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 | 2995 | 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 | 2996 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2997 | 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 | 2998 |   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 | 2999 | 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 | 3000 | 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 | 3001 | 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 | 3002 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3003 | 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 | 3004 |   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 | 3005 | 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 | 3006 | 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 | 3007 | 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 | 3008 | 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 | 3009 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3010 | 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 | 3011 | 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 | 3012 | 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 | 3013 | 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 | 3014 | 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 | 3015 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3016 | 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 | 3017 |   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 | 3018 | 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 | 3019 | 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 | 3020 | 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 | 3021 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3022 | 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 | 3023 | 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 | 3024 | 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 | 3025 | 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 | 3026 | 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 | 3027 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3028 | 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 | 3029 | "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 | 3030 | 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 | 3031 | 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 | 3032 | 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 | 3033 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3034 | 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 | 3035 | "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 | 3036 | 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 | 3037 | 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 | 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 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3040 | 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 | 3041 | "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 | 3042 | 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 | 3043 | 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 | 3044 | 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 | 3045 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3046 | 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 | 3047 | 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 | 3048 | 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 | 3049 | 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 | 3050 | 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 | 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_regpart: | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3053 |   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 | 3054 | 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 | 3055 | 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 | 3056 | proof - | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3057 | 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 | 3058 | "\<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 | 3059 | 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 | 3060 | 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 | 3061 | 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 | 3062 | 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 | 3063 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3064 | 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 | 3065 | 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 | 3066 | 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 | 3067 | 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 | 3068 | 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 | 3069 | 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 | 3070 | 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 | 3071 | "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 | 3072 | ] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3073 | 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 | 3074 | 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 | 3075 | 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 | 3076 | 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 | 3077 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3078 | 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 | 3079 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3080 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3081 | 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 | 3082 |   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 | 3083 | shows | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3084 | "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 | 3085 | 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 | 3086 | 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 | 3087 | 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 | 3088 | 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 | 3089 | 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 | 3090 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3091 | 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 | 3092 | 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 | 3093 | 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 | 3094 | 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 | 3095 | 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 | 3096 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3097 | 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 | 3098 |   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 | 3099 | 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 | 3100 | 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 | 3101 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3102 | 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 | 3103 | "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 | 3104 | 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 | 3105 | 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 | 3106 | 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 | 3107 | 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 | 3108 | 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 | 3109 | 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 | 3110 | 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 | 3111 | 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 | 3112 | 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 | 3113 | 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 | 3114 | 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 | 3115 | 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 | 3116 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3117 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3118 | 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 | 3119 |   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 | 3120 | 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 | 3121 | 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 | 3122 | 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 | 3123 | 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 | 3124 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3125 | 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 | 3126 | 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 | 3127 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3128 | 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 | 3129 | 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 | 3130 | 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 | 3131 | 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 | 3132 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3133 | 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 | 3134 |   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 | 3135 | 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 | 3136 | 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 | 3137 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3138 | 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 | 3139 | "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 | 3140 | 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 | 3141 | 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 | 3142 | 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 | 3143 | 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 | 3144 | 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 | 3145 | 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 | 3146 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3147 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3148 | 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 | 3149 | 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 | 3150 | 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 | 3151 | 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 | 3152 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3153 | 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 | 3154 |   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 | 3155 | 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 | 3156 | 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 | 3157 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3158 | 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 | 3159 | 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 | 3160 | "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 | 3161 | 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 | 3162 | 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 | 3163 | 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 | 3164 | 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 | 3165 | 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 | 3166 | qed | 
| 
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_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 | 3169 | 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 | 3170 | 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 | 3171 | 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 | 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_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 | 3174 |   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 | 3175 | 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 | 3176 | 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 | 3177 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3178 | 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 | 3179 | "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 | 3180 | 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 | 3181 | 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 | 3182 | 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 | 3183 | 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 | 3184 | 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 | 3185 | 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 | 3186 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3187 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3188 | 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 | 3189 | 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 | 3190 | 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 | 3191 | 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 | 3192 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3193 | 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 | 3194 |   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 | 3195 | 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 | 3196 | 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 | 3197 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3198 | 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 | 3199 | 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 | 3200 | 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 | 3201 | "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 | 3202 | 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 | 3203 | 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 | 3204 | 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 | 3205 | "\<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 | 3206 | 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 | 3207 | 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 | 3208 | 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 | 3209 | 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 | 3210 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3211 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3212 | 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 | 3213 | 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 | 3214 | 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 | 3215 | 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 | 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_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 | 3218 |   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 | 3219 | 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 | 3220 | 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 | 3221 | 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 | 3222 | 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 | 3223 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3224 | 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 | 3225 |   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 | 3226 | 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 | 3227 | 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 | 3228 | 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 | 3229 | 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 | 3230 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3231 | 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 | 3232 | 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 | 3233 | 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 | 3234 | 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 | 3235 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3236 | 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 | 3237 | 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 | 3238 | 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 | 3239 | 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 | 3240 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3241 | 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 | 3242 |   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 | 3243 | 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 | 3244 | 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 | 3245 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3246 | 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 | 3247 | "(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 | 3248 | 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 | 3249 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3250 | 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 | 3251 |   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 | 3252 | 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 | 3253 | 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 | 3254 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3255 | 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 | 3256 |   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 | 3257 | 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 | 3258 | 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 | 3259 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3260 | 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 | 3261 |   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 | 3262 | 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 | 3263 | 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 | 3264 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3265 | 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 | 3266 | 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 | 3267 | 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 | 3268 | 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 | 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 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3271 | 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 | 3272 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3273 | 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 | 3274 | 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 | 3275 | 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 | 3276 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3277 | 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 | 3278 | 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 | 3279 | 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 | 3280 | 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 | 3281 | 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 | 3282 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3283 | 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 | 3284 | 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 | 3285 | 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 | 3286 | 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 | 3287 | 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 | 3288 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3289 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3290 | 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 | 3291 | 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 | 3292 | 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 | 3293 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3294 | 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 | 3295 | 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 | 3296 | 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 | 3297 | 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 | 3298 | 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 | 3299 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3300 | 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 | 3301 | 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 | 3302 | 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 | 3303 | 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 | 3304 | 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 | 3305 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3306 | |
| 77275 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3307 | subsection \<open>Composition\<close> | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3308 | |
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3309 | definition fls_compose_fps :: "'a :: field fls \<Rightarrow> 'a fps \<Rightarrow> 'a fls" where | 
| 78751 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3310 | "fls_compose_fps F G = | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3311 | fps_to_fls (fps_compose (fls_base_factor_to_fps F) G) * fps_to_fls G powi fls_subdegree F" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3312 | |
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3313 | lemma fps_compose_of_nat [simp]: "fps_compose (of_nat n :: 'a :: comm_ring_1 fps) H = of_nat n" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3314 | and fps_compose_of_int [simp]: "fps_compose (of_int i) H = of_int i" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3315 | unfolding fps_of_nat [symmetric] fps_of_int [symmetric] numeral_fps_const | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3316 | by (rule fps_const_compose)+ | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3317 | |
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3318 | lemmas [simp] = fps_to_fls_of_nat fps_to_fls_of_int | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3319 | |
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3320 | lemma fls_compose_fps_0 [simp]: "fls_compose_fps 0 H = 0" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3321 | and fls_compose_fps_1 [simp]: "fls_compose_fps 1 H = 1" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3322 | and fls_compose_fps_const [simp]: "fls_compose_fps (fls_const c) H = fls_const c" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3323 | and fls_compose_fps_of_nat [simp]: "fls_compose_fps (of_nat n) H = of_nat n" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3324 | and fls_compose_fps_of_int [simp]: "fls_compose_fps (of_int i) H = of_int i" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3325 | and fls_compose_fps_X [simp]: "fls_compose_fps fls_X F = fps_to_fls F" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3326 | by (simp_all add: fls_compose_fps_def) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3327 | |
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3328 | lemma fls_compose_fps_0_right: | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3329 | "fls_compose_fps F 0 = (if 0 \<le> fls_subdegree F then fls_const (F $$ 0) else 0)" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3330 | by (cases "fls_subdegree F = 0") (simp_all add: fls_compose_fps_def) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3331 | |
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3332 | lemma fls_compose_fps_shift: | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3333 | assumes "H \<noteq> 0" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3334 | shows "fls_compose_fps (fls_shift n F) H = fls_compose_fps F H * fps_to_fls H powi (-n)" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3335 | proof (cases "F = 0") | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3336 | case False | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3337 | thus ?thesis | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3338 | using assms by (simp add: fls_compose_fps_def power_int_diff power_int_minus field_simps) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3339 | qed auto | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3340 | |
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3341 | lemma fls_compose_fps_to_fls [simp]: | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3342 | assumes [simp]: "G \<noteq> 0" "fps_nth G 0 = 0" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3343 | shows "fls_compose_fps (fps_to_fls F) G = fps_to_fls (fps_compose F G)" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3344 | proof (cases "F = 0") | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3345 | case False | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3346 | define n where "n = subdegree F" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3347 | define F' where "F' = fps_shift n F" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3348 | have [simp]: "F' \<noteq> 0" "subdegree F' = 0" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3349 | using False by (auto simp: F'_def n_def) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3350 | have F_eq: "F = F' * fps_X ^ n" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3351 | unfolding F'_def n_def using subdegree_decompose by blast | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3352 | have "fls_compose_fps (fps_to_fls F) G = | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3353 | fps_to_fls (fps_shift n (fls_regpart (fps_to_fls F' * fls_X_intpow (int n))) oo G) * fps_to_fls (G ^ n)" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3354 | unfolding F_eq fls_compose_fps_def | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3355 | by (simp add: fls_times_fps_to_fls fls_X_power_conv_shift_1 power_int_add | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3356 | fls_subdegree_fls_to_fps fps_to_fls_power fls_regpart_shift_conv_fps_shift | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3357 | flip: fls_times_both_shifted_simp) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3358 | also have "fps_to_fls F' * fls_X_intpow (int n) = fps_to_fls F" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3359 | by (simp add: F_eq fls_times_fps_to_fls fps_to_fls_power fls_X_power_conv_shift_1) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3360 | also have "fps_to_fls (fps_shift n (fls_regpart (fps_to_fls F)) oo G) * fps_to_fls (G ^ n) = | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3361 | fps_to_fls ((fps_shift n (fls_regpart (fps_to_fls F)) * fps_X ^ n) oo G)" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3362 | by (simp add: fls_times_fps_to_fls flip: fps_compose_power add: fps_compose_mult_distrib) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3363 | also have "fps_shift n (fls_regpart (fps_to_fls F)) * fps_X ^ n = F" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3364 | by (simp add: F_eq) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3365 | finally show ?thesis . | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3366 | qed (auto simp: fls_compose_fps_def) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3367 | |
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3368 | lemma fls_compose_fps_mult: | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3369 | assumes [simp]: "H \<noteq> 0" "fps_nth H 0 = 0" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3370 | shows "fls_compose_fps (F * G) H = fls_compose_fps F H * fls_compose_fps G H" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3371 | using assms | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3372 | proof (cases "F * G = 0") | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3373 | case False | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3374 | hence [simp]: "F \<noteq> 0" "G \<noteq> 0" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3375 | by auto | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3376 | define n m where "n = fls_subdegree F" "m = fls_subdegree G" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3377 | define F' where "F' = fls_regpart (fls_shift n F)" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3378 | define G' where "G' = fls_regpart (fls_shift m G)" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3379 | have F_eq: "F = fls_shift (-n) (fps_to_fls F')" and G_eq: "G = fls_shift (-m) (fps_to_fls G')" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3380 | by (simp_all add: F'_def G'_def n_m_def) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3381 | have "fls_compose_fps (F * G) H = fls_compose_fps (fls_shift (-(n + m)) (fps_to_fls (F' * G'))) H" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3382 | by (simp add: fls_times_fps_to_fls F_eq G_eq fls_shifted_times_simps) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3383 | also have "\<dots> = fps_to_fls ((F' oo H) * (G' oo H)) * fps_to_fls H powi (m + n)" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3384 | by (simp add: fls_compose_fps_shift fps_compose_mult_distrib) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3385 | also have "\<dots> = fls_compose_fps F H * fls_compose_fps G H" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3386 | by (simp add: F_eq G_eq fls_compose_fps_shift fls_times_fps_to_fls power_int_add) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3387 | finally show ?thesis . | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3388 | qed auto | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3389 | |
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3390 | lemma fls_compose_fps_power: | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3391 | assumes [simp]: "G \<noteq> 0" "fps_nth G 0 = 0" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3392 | shows "fls_compose_fps (F ^ n) G = fls_compose_fps F G ^ n" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3393 | by (induction n) (auto simp: fls_compose_fps_mult) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3394 | |
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3395 | lemma fls_compose_fps_add: | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3396 | assumes [simp]: "H \<noteq> 0" "fps_nth H 0 = 0" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3397 | shows "fls_compose_fps (F + G) H = fls_compose_fps F H + fls_compose_fps G H" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3398 | proof (cases "F = 0 \<or> G = 0") | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3399 | case False | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3400 | hence [simp]: "F \<noteq> 0" "G \<noteq> 0" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3401 | by auto | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3402 | define n where "n = min (fls_subdegree F) (fls_subdegree G)" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3403 | define F' where "F' = fls_regpart (fls_shift n F)" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3404 | define G' where "G' = fls_regpart (fls_shift n G)" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3405 | have F_eq: "F = fls_shift (-n) (fps_to_fls F')" and G_eq: "G = fls_shift (-n) (fps_to_fls G')" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3406 | unfolding n_def by (simp_all add: F'_def G'_def n_def) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3407 | have "F + G = fls_shift (-n) (fps_to_fls (F' + G'))" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3408 | by (simp add: F_eq G_eq) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3409 | also have "fls_compose_fps \<dots> H = fls_compose_fps (fps_to_fls (F' + G')) H * fps_to_fls H powi n" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3410 | by (subst fls_compose_fps_shift) auto | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3411 | also have "\<dots> = fps_to_fls (fps_compose (F' + G') H) * fps_to_fls H powi n" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3412 | by (subst fls_compose_fps_to_fls) auto | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3413 | also have "\<dots> = fls_compose_fps F H + fls_compose_fps G H" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3414 | by (simp add: F_eq G_eq fls_compose_fps_shift fps_compose_add_distrib algebra_simps) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3415 | finally show ?thesis . | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3416 | qed auto | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3417 | |
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3418 | lemma fls_compose_fps_uminus [simp]: "fls_compose_fps (-F) H = -fls_compose_fps F H" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3419 | by (simp add: fls_compose_fps_def fps_compose_uminus) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3420 | |
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3421 | lemma fls_compose_fps_diff: | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3422 | assumes [simp]: "H \<noteq> 0" "fps_nth H 0 = 0" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3423 | shows "fls_compose_fps (F - G) H = fls_compose_fps F H - fls_compose_fps G H" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3424 | using fls_compose_fps_add[of H F "-G"] by simp | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3425 | |
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3426 | lemma fps_compose_eq_0_iff: | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3427 | fixes F G :: "'a :: idom fps" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3428 | assumes "fps_nth G 0 = 0" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3429 | shows "fps_compose F G = 0 \<longleftrightarrow> F = 0 \<or> (G = 0 \<and> fps_nth F 0 = 0)" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3430 | proof safe | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3431 | assume *: "fps_compose F G = 0" "F \<noteq> 0" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3432 | have "fps_nth (fps_compose F G) 0 = fps_nth F 0" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3433 | by simp | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3434 | also have "fps_compose F G = 0" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3435 | by (simp add: *) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3436 | finally show "fps_nth F 0 = 0" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3437 | by simp | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3438 | show "G = 0" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3439 | proof (rule ccontr) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3440 | assume "G \<noteq> 0" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3441 | hence "subdegree G > 0" using assms | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3442 | using subdegree_eq_0_iff by blast | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3443 | define N where "N = subdegree F * subdegree G" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3444 | have "fps_nth (fps_compose F G) N = (\<Sum>i = 0..N. fps_nth F i * fps_nth (G ^ i) N)" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3445 | unfolding fps_compose_def by (simp add: N_def) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3446 |     also have "\<dots> = (\<Sum>i\<in>{subdegree F}. fps_nth F i * fps_nth (G ^ i) N)"
 | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3447 | proof (intro sum.mono_neutral_right ballI) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3448 |       fix i assume i: "i \<in> {0..N} - {subdegree F}"
 | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3449 | show "fps_nth F i * fps_nth (G ^ i) N = 0" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3450 | proof (cases i "subdegree F" rule: linorder_cases) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3451 | assume "i > subdegree F" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3452 | hence "fps_nth (G ^ i) N = 0" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3453 | using i \<open>subdegree G > 0\<close> by (intro fps_pow_nth_below_subdegree) (auto simp: N_def) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3454 | thus ?thesis by simp | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3455 | qed (use i in \<open>auto simp: N_def\<close>) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3456 | qed (use \<open>subdegree G > 0\<close> in \<open>auto simp: N_def\<close>) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3457 | also have "\<dots> = fps_nth F (subdegree F) * fps_nth (G ^ subdegree F) N" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3458 | by simp | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3459 | also have "\<dots> \<noteq> 0" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3460 | using \<open>G \<noteq> 0\<close> \<open>F \<noteq> 0\<close> by (auto simp: N_def) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3461 | finally show False using * by auto | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3462 | qed | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3463 | qed auto | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3464 | |
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3465 | lemma fls_compose_fps_eq_0_iff: | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3466 | assumes "H \<noteq> 0" "fps_nth H 0 = 0" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3467 | shows "fls_compose_fps F H = 0 \<longleftrightarrow> F = 0" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3468 | using assms fls_base_factor_to_fps_nonzero[of F] | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3469 | by (cases "F = 0") (auto simp: fls_compose_fps_def fps_compose_eq_0_iff) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3470 | |
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3471 | lemma fls_compose_fps_inverse: | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3472 | assumes [simp]: "H \<noteq> 0" "fps_nth H 0 = 0" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3473 | shows "fls_compose_fps (inverse F) H = inverse (fls_compose_fps F H)" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3474 | proof (cases "F = 0") | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3475 | case False | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3476 | have "fls_compose_fps (inverse F) H * fls_compose_fps F H = | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3477 | fls_compose_fps (inverse F * F) H" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3478 | by (subst fls_compose_fps_mult) auto | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3479 | also have "inverse F * F = 1" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3480 | using False by simp | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3481 | finally show ?thesis | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3482 | using False by (simp add: field_simps fls_compose_fps_eq_0_iff) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3483 | qed auto | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3484 | |
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3485 | lemma fls_compose_fps_divide: | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3486 | assumes [simp]: "H \<noteq> 0" "fps_nth H 0 = 0" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3487 | shows "fls_compose_fps (F / G) H = fls_compose_fps F H / fls_compose_fps G H" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3488 | using fls_compose_fps_mult[of H F "inverse G"] fls_compose_fps_inverse[of H G] | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3489 | by (simp add: field_simps) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3490 | |
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3491 | lemma fls_compose_fps_powi: | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3492 | assumes [simp]: "H \<noteq> 0" "fps_nth H 0 = 0" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3493 | shows "fls_compose_fps (F powi n) H = fls_compose_fps F H powi n" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3494 | by (simp add: power_int_def fls_compose_fps_power fls_compose_fps_inverse) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3495 | |
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3496 | lemma fls_compose_fps_assoc: | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3497 | assumes [simp]: "G \<noteq> 0" "fps_nth G 0 = 0" "H \<noteq> 0" "fps_nth H 0 = 0" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3498 | shows "fls_compose_fps (fls_compose_fps F G) H = fls_compose_fps F (fps_compose G H)" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3499 | proof (cases "F = 0") | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3500 | case [simp]: False | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3501 | define n where "n = fls_subdegree F" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3502 | define F' where "F' = fls_regpart (fls_shift n F)" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3503 | have F_eq: "F = fls_shift (-n) (fps_to_fls F')" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3504 | by (simp add: F'_def n_def) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3505 | show ?thesis | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3506 | by (simp add: F_eq fls_compose_fps_shift fls_compose_fps_mult fls_compose_fps_powi | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3507 | fps_compose_eq_0_iff fps_compose_assoc) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3508 | qed auto | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3509 | |
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3510 | lemma subdegree_pos_iff: "subdegree F > 0 \<longleftrightarrow> F \<noteq> 0 \<and> fps_nth F 0 = 0" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3511 | using subdegree_eq_0_iff[of F] by auto | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3512 | |
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3513 | lemma fls_X_power_int [simp]: "fls_X powi n = (fls_X_intpow n :: 'a :: division_ring fls)" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3514 | by (auto simp: power_int_def fls_X_power_conv_shift_1 fls_inverse_X fls_inverse_shift | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3515 | simp flip: fls_inverse_X_power) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3516 | |
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3517 | lemma fls_const_power_int: "fls_const (c powi n) = fls_const (c :: 'a :: division_ring) powi n" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3518 | by (auto simp: power_int_def fls_const_power fls_inverse_const) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3519 | |
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3520 | lemma fls_nth_fls_compose_fps_linear: | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3521 | fixes c :: "'a :: field" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3522 | assumes [simp]: "c \<noteq> 0" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3523 | shows "fls_compose_fps F (fps_const c * fps_X) $$ n = F $$ n * c powi n" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3524 | proof - | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3525 |   {
 | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3526 | assume *: "n \<ge> fls_subdegree F" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3527 | hence "c ^ nat (n - fls_subdegree F) = c powi int (nat (n - fls_subdegree F))" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3528 | by (simp add: power_int_def) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3529 | also have "\<dots> * c powi fls_subdegree F = c powi (int (nat (n - fls_subdegree F)) + fls_subdegree F)" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3530 | using * by (subst power_int_add) auto | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3531 | also have "\<dots> = c powi n" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3532 | using * by simp | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3533 | finally have "c ^ nat (n - fls_subdegree F) * c powi fls_subdegree F = c powi n" . | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3534 | } | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3535 | thus ?thesis | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3536 | by (simp add: fls_compose_fps_def fps_compose_linear fls_times_fps_to_fls power_int_mult_distrib | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3537 | fls_shifted_times_simps | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3538 | flip: fls_const_power_int) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3539 | qed | 
| 77275 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3540 | |
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3541 | lemma fls_const_transfer [transfer_rule]: | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3542 | "rel_fun (=) (pcr_fls (=)) | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3543 | (\<lambda>c n. if n = 0 then c else 0) fls_const" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3544 | by (auto simp: fls_const_def rel_fun_def pcr_fls_def OO_def cr_fls_def) | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3545 | |
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3546 | lemma fls_shift_transfer [transfer_rule]: | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3547 | "rel_fun (=) (rel_fun (pcr_fls (=)) (pcr_fls (=))) | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3548 | (\<lambda>n f k. f (k+n)) fls_shift" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3549 | by (auto simp: fls_const_def rel_fun_def pcr_fls_def OO_def cr_fls_def) | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3550 | |
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3551 | lift_definition fls_compose_power :: "'a :: zero fls \<Rightarrow> nat \<Rightarrow> 'a fls" is | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3552 | "\<lambda>f d n. if d > 0 \<and> int d dvd n then f (n div int d) else 0" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3553 | proof - | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3554 | fix f :: "int \<Rightarrow> 'a" and d :: nat | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3555 | assume *: "eventually (\<lambda>n. f (-int n) = 0) cofinite" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3556 | show "eventually (\<lambda>n. (if d > 0 \<and> int d dvd -int n then f (-int n div int d) else 0) = 0) cofinite" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3557 | proof (cases "d = 0") | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3558 | case False | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3559 | from * have "eventually (\<lambda>n. f (-int n) = 0) at_top" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3560 | by (simp add: cofinite_eq_sequentially) | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3561 | hence "eventually (\<lambda>n. f (-int (n div d)) = 0) at_top" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3562 | by (rule eventually_compose_filterlim[OF _ filterlim_at_top_div_const_nat]) (use False in auto) | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3563 | hence "eventually (\<lambda>n. (if d > 0 \<and> int d dvd -int n then f (-int n div int d) else 0) = 0) at_top" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3564 | by eventually_elim (auto simp: zdiv_int dvd_neg_div) | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3565 | thus ?thesis | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3566 | by (simp add: cofinite_eq_sequentially) | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3567 | qed auto | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3568 | qed | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3569 | |
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3570 | lemma fls_nth_compose_power: | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3571 | assumes "d > 0" | 
| 78751 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3572 | shows "fls_compose_power f d $$ n = (if int d dvd n then f $$ (n div int d) else 0)" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3573 | by (simp add: assms fls_compose_power.rep_eq) | 
| 77275 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3574 | |
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3575 | |
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3576 | lemma fls_compose_power_0_left [simp]: "fls_compose_power 0 d = 0" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3577 | by transfer auto | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3578 | |
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3579 | lemma fls_compose_power_1_left [simp]: "d > 0 \<Longrightarrow> fls_compose_power 1 d = 1" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3580 | by transfer (auto simp: fun_eq_iff) | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3581 | |
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3582 | lemma fls_compose_power_const_left [simp]: | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3583 | "d > 0 \<Longrightarrow> fls_compose_power (fls_const c) d = fls_const c" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3584 | by transfer (auto simp: fun_eq_iff) | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3585 | |
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3586 | lemma fls_compose_power_shift [simp]: | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3587 | "d > 0 \<Longrightarrow> fls_compose_power (fls_shift n f) d = fls_shift (d * n) (fls_compose_power f d)" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3588 | by transfer (auto simp: fun_eq_iff add_ac mult_ac) | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3589 | |
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3590 | lemma fls_compose_power_X_intpow [simp]: | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3591 | "d > 0 \<Longrightarrow> fls_compose_power (fls_X_intpow n) d = fls_X_intpow (int d * n)" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3592 | by simp | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3593 | |
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3594 | lemma fls_compose_power_X [simp]: | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3595 | "d > 0 \<Longrightarrow> fls_compose_power fls_X d = fls_X_intpow (int d)" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3596 | by transfer (auto simp: fun_eq_iff) | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3597 | |
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3598 | lemma fls_compose_power_X_inv [simp]: | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3599 | "d > 0 \<Longrightarrow> fls_compose_power fls_X_inv d = fls_X_intpow (-int d)" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3600 | by (simp add: fls_X_inv_conv_shift_1) | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3601 | |
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3602 | lemma fls_compose_power_0_right [simp]: "fls_compose_power f 0 = 0" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3603 | by transfer auto | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3604 | |
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3605 | lemma fls_compose_power_add [simp]: | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3606 | "fls_compose_power (f + g) d = fls_compose_power f d + fls_compose_power g d" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3607 | by transfer auto | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3608 | |
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3609 | lemma fls_compose_power_diff [simp]: | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3610 | "fls_compose_power (f - g) d = fls_compose_power f d - fls_compose_power g d" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3611 | by transfer auto | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3612 | |
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3613 | lemma fls_compose_power_uminus [simp]: | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3614 | "fls_compose_power (-f) d = -fls_compose_power f d" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3615 | by transfer auto | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3616 | |
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3617 | lemma fps_nth_compose_X_power: | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3618 | "fps_nth (f oo (fps_X ^ d)) n = (if d dvd n then fps_nth f (n div d) else 0)" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3619 | proof - | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3620 | have "fps_nth (f oo (fps_X ^ d)) n = (\<Sum>i = 0..n. f $ i * (fps_X ^ (d * i)) $ n)" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3621 | unfolding fps_compose_def by (simp add: power_mult) | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3622 |   also have "\<dots> = (\<Sum>i\<in>(if d dvd n then {n div d} else {}). f $ i * (fps_X ^ (d * i)) $ n)"
 | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3623 | by (intro sum.mono_neutral_right) auto | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3624 | also have "\<dots> = (if d dvd n then fps_nth f (n div d) else 0)" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3625 | by auto | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3626 | finally show ?thesis . | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3627 | qed | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3628 | |
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3629 | lemma fls_compose_power_fps_to_fls: | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3630 | assumes "d > 0" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3631 | shows "fls_compose_power (fps_to_fls f) d = fps_to_fls (fps_compose f (fps_X ^ d))" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3632 | using assms | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3633 | by (intro fls_eqI) (auto simp: fls_nth_compose_power fps_nth_compose_X_power | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3634 | pos_imp_zdiv_neg_iff div_neg_pos_less0 nat_div_distrib | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3635 | simp flip: int_dvd_int_iff) | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3636 | |
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3637 | lemma fls_compose_power_mult [simp]: | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3638 | "fls_compose_power (f * g :: 'a :: idom fls) d = fls_compose_power f d * fls_compose_power g d" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3639 | proof (cases "d > 0") | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3640 | case True | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3641 | define n where "n = nat (max 0 (max (- fls_subdegree f) (- fls_subdegree g)))" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3642 | have n_ge: "-fls_subdegree f \<le> int n" "-fls_subdegree g \<le> int n" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3643 | unfolding n_def by auto | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3644 | obtain f' where f': "f = fls_shift n (fps_to_fls f')" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3645 | using fls_as_fps[OF n_ge(1)] by (auto simp: n_def) | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3646 | obtain g' where g': "g = fls_shift n (fps_to_fls g')" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3647 | using fls_as_fps[OF n_ge(2)] by (auto simp: n_def) | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3648 | show ?thesis using \<open>d > 0\<close> | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3649 | by (simp add: f' g' fls_shifted_times_simps mult_ac fls_compose_power_fps_to_fls | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3650 | fps_compose_mult_distrib flip: fls_times_fps_to_fls) | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3651 | qed auto | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3652 | |
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3653 | lemma fls_compose_power_power [simp]: | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3654 | assumes "d > 0 \<or> n > 0" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3655 | shows "fls_compose_power (f ^ n :: 'a :: idom fls) d = fls_compose_power f d ^ n" | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3656 | proof (cases "d > 0") | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3657 | case True | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3658 | thus ?thesis by (induction n) auto | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3659 | qed (use assms in auto) | 
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3660 | |
| 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3661 | lemma fls_nth_compose_power' [simp]: | 
| 78751 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3662 | "d = 0 \<or> \<not>d dvd n \<Longrightarrow> fls_compose_power f d $$ int n = 0" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3663 | "d dvd n \<Longrightarrow> d > 0 \<Longrightarrow> fls_compose_power f d $$ int n = f $$ int (n div d)" | 
| 77275 
386b1b33785c
New material due to Eberl on Formal Laurent Series
 paulson <lp15@cam.ac.uk> parents: 
70817diff
changeset | 3664 | by (transfer; force; fail)+ | 
| 69791 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3665 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3666 | 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 | 3667 | |
| 80061 
4c1347e172b1
moved over material from AFP; most importantly on algebraic numbers and algebraically closed fields
 Manuel Eberl <eberlm@in.tum.de> parents: 
78751diff
changeset | 3668 | subsubsection \<open>Derivative\<close> | 
| 69791 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3669 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3670 | 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 | 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 | 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 | 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 | 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 | 3675 | 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 | 3676 | 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 | 3677 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3678 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3679 | 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 | 3680 | 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 | 3681 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3682 | 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 | 3683 | 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 | 3684 | 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 | 3685 | 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 | 3686 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3687 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3688 | 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 | 3689 | 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 | 3690 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3691 | 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 | 3692 | 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 | 3693 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3694 | 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 | 3695 | 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 | 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 | 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 | 3698 | 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 | 3699 | |
| 78751 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3700 | lemma fls_deriv_numeral [simp]: "fls_deriv (numeral n) = 0" | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3701 | by (metis fls_deriv_of_int of_int_numeral) | 
| 
80b4f6a0808d
Fixed the duplication of fls_compose_fps, moving the definition in Laurent_Convergence to Formal_Laurent_Series along with several simpler facts
 paulson <lp15@cam.ac.uk> parents: 
77275diff
changeset | 3702 | |
| 69791 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3703 | 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 | 3704 | 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 | 3705 | 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 | 3706 | 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 | 3707 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3708 | 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 | 3709 | 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 | 3710 | 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 | 3711 | 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 | 3712 | 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 | 3713 | 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 | 3714 | 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 | 3715 | 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 | 3716 | 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 | 3717 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3718 | 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 | 3719 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3720 | 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 | 3721 | 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 | 3722 | 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 | 3723 | 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 | 3724 | 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 | 3725 | 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 | 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 | 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 | 3728 |   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 | 3729 | 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 | 3730 | 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 | 3731 | 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 | 3732 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3733 | 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 | 3734 | 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 | 3735 | rule. | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3736 | \<close> | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3737 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3738 | 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 | 3739 | "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 | 3740 | 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 | 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 | 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 | 3743 | 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 | 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 | 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 | 3746 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3747 | 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 | 3748 | 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 | 3749 | 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 | 3750 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3751 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3752 | 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 | 3753 | "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 | 3754 | 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 | 3755 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3756 | have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3757 | "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 | 3758 | 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 | 3759 | 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 | 3760 | 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 | 3761 | 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 | 3762 | 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 | 3763 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3764 | 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 | 3765 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3766 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3767 | 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 | 3768 | "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 | 3769 | 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 | 3770 | 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 | 3771 | 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 | 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_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 | 3774 | 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 | 3775 | 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 | 3776 | 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 | 3777 | 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 | 3778 | 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 | 3779 | 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 | 3780 | qed | 
| 
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_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 | 3783 |   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 | 3784 |   \<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 | 3785 | 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 | 3786 | 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 | 3787 | 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 | 3788 | show | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3789 | "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 | 3790 | 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 | 3791 | 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 | 3792 | 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 | 3793 | 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 | 3794 | 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 | 3795 | 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 | 3796 | 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 | 3797 | 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 | 3798 | "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 | 3799 | - 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 | 3800 | 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 | 3801 | 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 | 3802 | 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 | 3803 | 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 | 3804 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3805 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3806 | 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 | 3807 | "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 | 3808 | 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 | 3809 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3810 | 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 | 3811 | 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 | 3812 | 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 | 3813 | 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 | 3814 | 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 | 3815 | 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 | 3816 | 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 | 3817 | 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 | 3818 | 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 | 3819 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3820 | 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 | 3821 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3822 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3823 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3824 | |
| 80061 
4c1347e172b1
moved over material from AFP; most importantly on algebraic numbers and algebraically closed fields
 Manuel Eberl <eberlm@in.tum.de> parents: 
78751diff
changeset | 3825 | subsubsection \<open>Algebraic rules of the derivative\<close> | 
| 69791 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3826 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3827 | 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 | 3828 | 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 | 3829 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3830 | 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 | 3831 | 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 | 3832 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3833 | 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 | 3834 | 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 | 3835 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3836 | 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 | 3837 | "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 | 3838 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3839 | 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 | 3840 | 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 | 3841 | 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 | 3842 | 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 | 3843 | 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 | 3844 | 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 | 3845 | have | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3846 | "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 | 3847 | 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 | 3848 | "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 | 3849 | 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 | 3850 | 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 | 3851 | 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 | 3852 | 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 | 3853 | 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 | 3854 | 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 | 3855 | 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 | 3856 | 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 | 3857 | 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 | 3858 | 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 | 3859 | "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 | 3860 | ( 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 | 3861 | ( 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 | 3862 | " | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3863 | 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 | 3864 | "- (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 | 3865 | ] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3866 | 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 | 3867 | 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 | 3868 | 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 | 3869 | "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 | 3870 | "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 | 3871 | 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 | 3872 | )" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3873 | ] | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3874 | 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 | 3875 | 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 | 3876 | 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 | 3877 | 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 | 3878 | 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 | 3879 | 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 | 3880 | 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 | 3881 | 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 | 3882 | 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 | 3883 | 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 | 3884 | 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 | 3885 | 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 | 3886 | 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 | 3887 | 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 | 3888 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3889 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3890 | 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 | 3891 | "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 | 3892 | 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 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3894 | 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 | 3895 | "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 | 3896 | 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 | 3897 | 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 | 3898 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3899 | 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 | 3900 | "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 | 3901 | 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 | 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_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 | 3904 | "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 | 3905 | 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 | 3906 | 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 | 3907 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3908 | 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 | 3909 | "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 | 3910 | 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 | 3911 | 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 | 3912 | 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 | 3913 | 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 | 3914 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3915 | 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 | 3916 | 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 | 3917 | 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 | 3918 | 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 | 3919 | 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 | 3920 | 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 | 3921 | 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 | 3922 | 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 | 3923 | 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 | 3924 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3925 | 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 | 3926 | "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 | 3927 | 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 | 3928 | 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 | 3929 | 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 | 3930 | 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 | 3931 | 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 | 3932 | 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 | 3933 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3934 | 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 | 3935 | "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 | 3936 | 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 | 3937 | 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 | 3938 | 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 | 3939 | 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 | 3940 | 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 | 3941 | 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 | 3942 | 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 | 3943 | 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 | 3944 | - (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 | 3945 | 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 | 3946 | 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 | 3947 | 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 | 3948 | 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 | 3949 | 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 | 3950 | 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 | 3951 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3952 | 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 | 3953 | "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 | 3954 | 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 | 3955 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3956 | 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 | 3957 | 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 | 3958 | \<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 | 3959 | 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 | 3960 | - 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 | 3961 | 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 | 3962 | - 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 | 3963 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3964 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3965 | 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 | 3966 | 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 | 3967 | 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 | 3968 | 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 | 3969 | 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 | 3970 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3971 | 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 | 3972 | 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 | 3973 | 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 | 3974 | 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 | 3975 | 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 | 3976 | 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 | 3977 | 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 | 3978 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3979 | qed | 
| 
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_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 | 3982 | 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 | 3983 | 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 | 3984 | 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 | 3985 | 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 | 3986 | 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 | 3987 | 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 | 3988 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3989 | 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 | 3990 | 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 | 3991 | 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 | 3992 | 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 | 3993 | 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 | 3994 | 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 | 3995 | "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 | 3996 | ] | 
| 
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 (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 | 3998 | 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 | 3999 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4000 | 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 | 4001 | 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 | 4002 | 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 | 4003 | 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 | 4004 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4005 | 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 | 4006 | 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 | 4007 | 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 | 4008 | 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 | 4009 | 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 | 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>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 | 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_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 | 4015 |   "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 | 4016 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4017 | 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 | 4018 | 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 | 4019 | 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 | 4020 | 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 | 4021 | 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 | 4022 | 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 | 4023 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4024 | next | 
| 
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 "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 | 4026 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4027 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4028 | 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 | 4029 |   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 | 4030 | 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 | 4031 | proof - | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4032 | 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 | 4033 | 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 | 4034 | 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 | 4035 | 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 | 4036 | 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 | 4037 | 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 | 4038 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4039 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4040 | 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 | 4041 |   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 | 4042 | 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 | 4043 | 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 | 4044 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4045 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4046 | 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 | 4047 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4048 | 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 | 4049 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4050 | 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 | 4051 | 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 | 4052 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4053 | 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 | 4054 | 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 | 4055 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4056 | 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 | 4057 | "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 | 4058 | 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 | 4059 | 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 | 4060 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4061 | 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 | 4062 | 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 | 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 | 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 | 4065 | "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 | 4066 | 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 | 4067 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4068 | 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 | 4069 | 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 | 4070 | 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 | 4071 | 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 | 4072 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4073 | 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 | 4074 |   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 | 4075 | 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 | 4076 | 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 | 4077 | 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 | 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 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 | 4080 | 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 | 4081 | 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 | 4082 | 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 | 4083 | 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 | 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 | 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 | 4086 | 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 | 4087 | 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 | 4088 | 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 | 4089 | 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 | 4090 | 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 | 4091 | 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 | 4092 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4093 | 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 | 4094 | 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 | 4095 | 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 | 4096 | 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 | 4097 | 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 | 4098 | 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 | 4099 | 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 | 4100 | 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 | 4101 | 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 | 4102 | 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 | 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 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4105 | 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 | 4106 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4107 | 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 | 4108 | 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 | 4109 | 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 | 4110 | 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 | 4111 | 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 | 4112 | 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 | 4113 | 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 | 4114 | 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 | 4115 | 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 | 4116 | 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 | 4117 | 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 | 4118 | 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 | 4119 | 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 | 4120 | "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 | 4121 | (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 | 4122 | 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 | 4123 | 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 | 4124 | 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 | 4125 | 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 | 4126 | 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 | 4127 | 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 | 4128 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4129 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4130 | 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 | 4131 | 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 | 4132 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4133 | 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 | 4134 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4135 | 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 | 4136 | 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 | 4137 | 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 | 4138 | 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 | 4139 | 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 | 4140 | 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 | 4141 | 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 | 4142 | 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 | 4143 | 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 | 4144 | 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 | 4145 | 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 | 4146 | 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 | 4147 | 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 | 4148 | "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 | 4149 | 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 | 4150 | 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 | 4151 | 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 | 4152 | 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 | 4153 | 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 | 4154 | 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 | 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 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4157 | 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 | 4158 | 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 | 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 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4161 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4162 | 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 | 4163 | 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 | 4164 | 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 | 4165 | 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 | 4166 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4167 | 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 | 4168 | 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 | 4169 | 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 | 4170 | 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 | 4171 | 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 | 4172 | 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 | 4173 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4174 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4175 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4176 | 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 | 4177 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4178 | 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 | 4179 | 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 | 4180 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4181 | 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 | 4182 | "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 | 4183 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4184 | 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 | 4185 | 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 | 4186 | 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 | 4187 | 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 | 4188 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4189 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4190 | 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 | 4191 | 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 | 4192 | 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 | 4193 | 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 | 4194 | 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 | 4195 | 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 | 4196 | 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 | 4197 | 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 | 4198 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4199 | 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 | 4200 | 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 | 4201 | 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 | 4202 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4203 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4204 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4205 | 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 | 4206 | 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 | 4207 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4208 | 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 | 4209 |   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 | 4210 | 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 | 4211 | 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 | 4212 | 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 | 4213 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4214 | 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 | 4215 | 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 | 4216 | 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 | 4217 | 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 | 4218 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4219 | 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 | 4220 |   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 | 4221 | 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 | 4222 | 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 | 4223 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4224 | 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 | 4225 | "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 | 4226 | 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 | 4227 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4228 | 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 | 4229 |   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 | 4230 | 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 | 4231 | 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 | 4232 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4233 | 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 | 4234 | "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 | 4235 | 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 | 4236 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4237 | 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 | 4238 |   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 | 4239 | 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 | 4240 | 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 | 4241 | 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 | 4242 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4243 | 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 | 4244 | 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 | 4245 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4246 | 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 | 4247 | "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 | 4248 | 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 | 4249 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4250 | 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 | 4251 |   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 | 4252 | 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 | 4253 | 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 | 4254 | 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 | 4255 | 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 | 4256 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4257 | 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 | 4258 |   "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 | 4259 | 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 | 4260 | 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 | 4261 | 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 | 4262 | 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 | 4263 | 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 | 4264 | 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 | 4265 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4266 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4267 | 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 | 4268 |   "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 | 4269 | 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 | 4270 | 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 | 4271 | 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 | 4272 | 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 | 4273 | 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 | 4274 | thus | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4275 | "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 | 4276 | (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 | 4277 | 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 | 4278 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4279 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4280 | 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 | 4281 |   "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 | 4282 | 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 | 4283 | proof - | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4284 | 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 | 4285 | 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 | 4286 | 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 | 4287 | 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 | 4288 | "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 | 4289 | 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 | 4290 | 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 | 4291 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4292 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4293 | 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 | 4294 | 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 | 4295 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4296 | 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 | 4297 | 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 | 4298 | shows | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4299 |     "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 | 4300 | 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 | 4301 | 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 | 4302 | 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 | 4303 | "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 | 4304 | (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 | 4305 | 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 | 4306 | 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 | 4307 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4308 | 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 | 4309 | 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 | 4310 | hence | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4311 | "(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 | 4312 | (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 | 4313 | 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 | 4314 | 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 | 4315 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4316 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4317 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4318 | 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 | 4319 | 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 | 4320 | shows | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4321 |     "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 | 4322 | 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 | 4323 | proof- | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4324 | 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 | 4325 | hence | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4326 | "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 | 4327 | 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 | 4328 | 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 | 4329 | "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 | 4330 | 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 | 4331 | 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 | 4332 | 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 | 4333 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4334 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4335 | 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 | 4336 | 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 | 4337 | shows | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4338 | "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 | 4339 | - 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 | 4340 | 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 | 4341 | 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 | 4342 | 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 | 4343 | hence | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4344 | "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 | 4345 | 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 | 4346 | 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 | 4347 | 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 | 4348 | 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 | 4349 | 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 | 4350 | 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 | 4351 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4352 | 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 | 4353 | 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 | 4354 | shows | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4355 |     "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 | 4356 | - 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 | 4357 | 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 | 4358 | 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 | 4359 | 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 | 4360 | 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 | 4361 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4362 | 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 | 4363 | 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 | 4364 | shows | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4365 | "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 | 4366 | 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 | 4367 | 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 | 4368 | 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 | 4369 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4370 | 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 | 4371 | "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 | 4372 | 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 | 4373 | 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 | 4374 | 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 | 4375 | 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 | 4376 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4377 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4378 | 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 | 4379 | "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 | 4380 | 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 | 4381 | 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 | 4382 | 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 | 4383 | 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 | 4384 | 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 | 4385 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4386 | 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 | 4387 | 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 | 4388 | 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 | 4389 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4390 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4391 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4392 | |
| 80061 
4c1347e172b1
moved over material from AFP; most importantly on algebraic numbers and algebraically closed fields
 Manuel Eberl <eberlm@in.tum.de> parents: 
78751diff
changeset | 4393 | subsubsection \<open>Algebraic rules of the integral\<close> | 
| 69791 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4394 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4395 | 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 | 4396 | 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 | 4397 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4398 | 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 | 4399 | 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 | 4400 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4401 | 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 | 4402 | 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 | 4403 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4404 | 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 | 4405 | "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 | 4406 | 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 | 4407 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4408 | 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 | 4409 |   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 | 4410 | 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 | 4411 | 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 | 4412 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4413 | 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 | 4414 | 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 | 4415 | shows | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4416 | "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 | 4417 | 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 | 4418 | 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 | 4419 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4420 | 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 | 4421 |   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 | 4422 | shows | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4423 | "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 | 4424 | 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 | 4425 | 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 | 4426 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4427 | 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 | 4428 | "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 | 4429 | 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 | 4430 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4431 | 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 | 4432 | "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 | 4433 | 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 | 4434 | 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 | 4435 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4436 | 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 | 4437 | "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 | 4438 | 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 | 4439 | 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 | 4440 | 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 | 4441 | 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 | 4442 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4443 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4444 | 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 | 4445 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4446 | 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 | 4447 |   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 | 4448 | 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 | 4449 | 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 | 4450 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4451 | 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 | 4452 |   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 | 4453 | 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 | 4454 | 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 | 4455 | 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 | 4456 | 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 | 4457 | 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 | 4458 | 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 | 4459 | 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 | 4460 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4461 | 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 | 4462 | 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 | 4463 | 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 | 4464 | 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 | 4465 | 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 | 4466 | "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 | 4467 | (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 | 4468 | 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 | 4469 | 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 | 4470 | 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 | 4471 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4472 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4473 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4474 | 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 | 4475 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4476 | 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 | 4477 |   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 | 4478 | 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 | 4479 | 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 | 4480 | 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 | 4481 | 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 | 4482 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4483 | 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 | 4484 | 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 | 4485 | 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 | 4486 | 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 | 4487 | 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 | 4488 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4489 | 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 | 4490 |   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 | 4491 | 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 | 4492 | 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 | 4493 | 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 | 4494 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4495 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4496 | 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 | 4497 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4498 | 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 | 4499 | begin | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4500 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4501 | definition | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4502 | 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 | 4503 | "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 | 4504 | (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 | 4505 | 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 | 4506 | 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 | 4507 | 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 | 4508 | 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 | 4509 | )" | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4510 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4511 | 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 | 4512 | 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 | 4513 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4514 | definition uniformity_fls_def [code del]: | 
| 70337 
48609a6af1a0
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69792diff
changeset | 4515 |   "(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 | 4516 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4517 | 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 | 4518 | "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 | 4519 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4520 | 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 | 4521 | 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 | 4522 | (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 | 4523 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4524 | context | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4525 | begin | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4526 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4527 | 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 | 4528 | 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 | 4529 | 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 | 4530 | 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 | 4531 | 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 | 4532 | proof ( | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4533 | 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 | 4534 | 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 | 4535 | ) | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4536 | 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 | 4537 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4538 | 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 | 4539 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4540 | 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 | 4541 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4542 | 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 | 4543 | 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 | 4544 | 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 | 4545 | 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 | 4546 | 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 | 4547 | 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 | 4548 | 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 | 4549 | 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 | 4550 | 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 | 4551 | 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 | 4552 | 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 | 4553 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4554 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4555 | instance | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4556 | proof | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4557 | 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 | 4558 | 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 | 4559 | 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 | 4560 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4561 | 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 | 4562 | 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 | 4563 | 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 | 4564 | 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 | 4565 | 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 | 4566 | 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 | 4567 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4568 | 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 | 4569 | 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 | 4570 | 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 | 4571 | next | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4572 | 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 | 4573 | 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 | 4574 | proof - | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4575 | 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 | 4576 | 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 | 4577 | 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 | 4578 | 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 | 4579 | 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 | 4580 | 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 | 4581 | 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 | 4582 | 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 | 4583 | 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 | 4584 | 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 | 4585 | 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 | 4586 | 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 | 4587 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4588 | 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 | 4589 | qed | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4590 | 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 | 4591 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4592 | end | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4593 | end | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4594 | |
| 69792 
d21789843f01
Resolved codegen problem with uniformity for formal Laurent series
 Manuel Eberl <eberlm@in.tum.de> parents: 
69791diff
changeset | 4595 | 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 | 4596 | |
| 69791 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4597 | 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 | 4598 |   "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 | 4599 | 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 | 4600 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4601 | |
| 80061 
4c1347e172b1
moved over material from AFP; most importantly on algebraic numbers and algebraically closed fields
 Manuel Eberl <eberlm@in.tum.de> parents: 
78751diff
changeset | 4602 | subsection \<open>Notation\<close> | 
| 69791 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4603 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4604 | 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 | 4605 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4606 | 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 | 4607 | begin | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4608 | 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 | 4609 | end | 
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4610 | |
| 
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4611 | end |