author | wenzelm |
Sat, 01 Jun 2019 11:29:59 +0200 | |
changeset 70299 | 83774d669b51 |
parent 69792 | d21789843f01 |
child 70337 | 48609a6af1a0 |
permissions | -rw-r--r-- |
69791
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1 |
(* |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2 |
Title: HOL/Computational_Algebra/Formal_Laurent_Series.thy |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3 |
Author: Jeremy Sylvestre, University of Alberta (Augustana Campus) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4 |
*) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
5 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
6 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
7 |
section \<open>A formalization of formal Laurent series\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
8 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
9 |
theory Formal_Laurent_Series |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
10 |
imports |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
11 |
Polynomial_FPS |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
12 |
begin |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
13 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
14 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
15 |
subsection \<open>The type of formal Laurent series\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
16 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
17 |
subsubsection \<open>Type definition\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
18 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
19 |
typedef (overloaded) 'a fls = "{f::int \<Rightarrow> 'a::zero. \<forall>\<^sub>\<infinity> n::nat. f (- int n) = 0}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
20 |
morphisms fls_nth Abs_fls |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
21 |
proof |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
22 |
show "(\<lambda>x. 0) \<in> {f::int \<Rightarrow> 'a::zero. \<forall>\<^sub>\<infinity> n::nat. f (- int n) = 0}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
23 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
24 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
25 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
26 |
setup_lifting type_definition_fls |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
27 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
28 |
unbundle fps_notation |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
29 |
notation fls_nth (infixl "$$" 75) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
30 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
31 |
lemmas fls_eqI = iffD1[OF fls_nth_inject, OF iffD2, OF fun_eq_iff, OF allI] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
32 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
33 |
lemma expand_fls_eq: "f = g \<longleftrightarrow> (\<forall>n. f $$ n = g $$ n)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
34 |
by (simp add: fls_nth_inject[symmetric] fun_eq_iff) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
35 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
36 |
lemma nth_Abs_fls [simp]: "\<forall>\<^sub>\<infinity>n. f (- int n) = 0 \<Longrightarrow> Abs_fls f $$ n = f n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
37 |
by (simp add: Abs_fls_inverse[OF CollectI]) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
38 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
39 |
lemmas nth_Abs_fls_finite_nonzero_neg_nth = nth_Abs_fls[OF iffD2, OF eventually_cofinite] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
40 |
lemmas nth_Abs_fls_ex_nat_lower_bound = nth_Abs_fls[OF iffD2, OF MOST_nat] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
41 |
lemmas nth_Abs_fls_nat_lower_bound = nth_Abs_fls_ex_nat_lower_bound[OF exI] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
42 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
43 |
lemma nth_Abs_fls_ex_lower_bound: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
44 |
assumes "\<exists>N. \<forall>n<N. f n = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
45 |
shows "Abs_fls f $$ n = f n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
46 |
proof (intro nth_Abs_fls_ex_nat_lower_bound) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
47 |
from assms obtain N::int where "\<forall>n<N. f n = 0" by fast |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
48 |
hence "\<forall>n > (if N < 0 then nat (-N) else 0). f (-int n) = 0" by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
49 |
thus "\<exists>M. \<forall>n>M. f (- int n) = 0" by fast |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
50 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
51 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
52 |
lemmas nth_Abs_fls_lower_bound = nth_Abs_fls_ex_lower_bound[OF exI] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
53 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
54 |
lemmas MOST_fls_neg_nth_eq_0 [simp] = CollectD[OF fls_nth] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
55 |
lemmas fls_finite_nonzero_neg_nth = iffD1[OF eventually_cofinite MOST_fls_neg_nth_eq_0] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
56 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
57 |
lemma fls_nth_vanishes_below_natE: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
58 |
fixes f :: "'a::zero fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
59 |
obtains N :: nat |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
60 |
where "\<forall>n>N. f$$(-int n) = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
61 |
using iffD1[OF MOST_nat MOST_fls_neg_nth_eq_0] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
62 |
by blast |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
63 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
64 |
lemma fls_nth_vanishes_belowE: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
65 |
fixes f :: "'a::zero fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
66 |
obtains N :: int |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
67 |
where "\<forall>n<N. f$$n = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
68 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
69 |
obtain K :: nat where K: "\<forall>n>K. f$$(-int n) = 0" by (elim fls_nth_vanishes_below_natE) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
70 |
have "\<forall>n < -int K. f$$n = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
71 |
proof clarify |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
72 |
fix n assume n: "n < -int K" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
73 |
define m where "m \<equiv> nat (-n)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
74 |
with n have "m > K" by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
75 |
moreover from n m_def have "f$$n = f $$ (-int m)" by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
76 |
ultimately show "f $$ n = 0" using K by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
77 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
78 |
thus "(\<And>N. \<forall>n<N. f $$ n = 0 \<Longrightarrow> thesis) \<Longrightarrow> thesis" by fast |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
79 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
80 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
81 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
82 |
subsubsection \<open>Definition of basic zero, one, constant, X, and inverse X elements\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
83 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
84 |
instantiation fls :: (zero) zero |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
85 |
begin |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
86 |
lift_definition zero_fls :: "'a fls" is "\<lambda>_. 0" by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
87 |
instance .. |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
88 |
end |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
89 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
90 |
lemma fls_zero_nth [simp]: "0 $$ n = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
91 |
by (simp add: zero_fls_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
92 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
93 |
lemma fls_zero_eqI: "(\<And>n. f$$n = 0) \<Longrightarrow> f = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
94 |
by (fastforce intro: fls_eqI) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
95 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
96 |
lemma fls_nonzeroI: "f$$n \<noteq> 0 \<Longrightarrow> f \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
97 |
by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
98 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
99 |
lemma fls_nonzero_nth: "f \<noteq> 0 \<longleftrightarrow> (\<exists> n. f $$ n \<noteq> 0)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
100 |
using fls_zero_eqI by fastforce |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
101 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
102 |
lemma fls_trivial_delta_eq_zero [simp]: "b = 0 \<Longrightarrow> Abs_fls (\<lambda>n. if n=a then b else 0) = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
103 |
by (intro fls_zero_eqI) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
104 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
105 |
lemma fls_delta_nth [simp]: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
106 |
"Abs_fls (\<lambda>n. if n=a then b else 0) $$ n = (if n=a then b else 0)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
107 |
using nth_Abs_fls_lower_bound[of a "\<lambda>n. if n=a then b else 0"] by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
108 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
109 |
instantiation fls :: ("{zero,one}") one |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
110 |
begin |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
111 |
lift_definition one_fls :: "'a fls" is "\<lambda>k. if k = 0 then 1 else 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
112 |
by (simp add: eventually_cofinite) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
113 |
instance .. |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
114 |
end |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
115 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
116 |
lemma fls_one_nth [simp]: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
117 |
"1 $$ n = (if n = 0 then 1 else 0)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
118 |
by (simp add: one_fls_def eventually_cofinite) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
119 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
120 |
instance fls :: (zero_neq_one) zero_neq_one |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
121 |
proof (standard, standard) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
122 |
assume "(0::'a fls) = (1::'a fls)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
123 |
hence "(0::'a fls) $$ 0 = (1::'a fls) $$ 0" by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
124 |
thus False by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
125 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
126 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
127 |
definition fls_const :: "'a::zero \<Rightarrow> 'a fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
128 |
where "fls_const c \<equiv> Abs_fls (\<lambda>n. if n = 0 then c else 0)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
129 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
130 |
lemma fls_const_nth [simp]: "fls_const c $$ n = (if n = 0 then c else 0)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
131 |
by (simp add: fls_const_def eventually_cofinite) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
132 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
133 |
lemma fls_const_0 [simp]: "fls_const 0 = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
134 |
unfolding fls_const_def using fls_trivial_delta_eq_zero by fast |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
135 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
136 |
lemma fls_const_nonzero: "c \<noteq> 0 \<Longrightarrow> fls_const c \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
137 |
using fls_nonzeroI[of "fls_const c" 0] by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
138 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
139 |
lemma fls_const_1 [simp]: "fls_const 1 = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
140 |
unfolding fls_const_def one_fls_def .. |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
141 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
142 |
lift_definition fls_X :: "'a::{zero,one} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
143 |
is "\<lambda>n. if n = 1 then 1 else 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
144 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
145 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
146 |
lemma fls_X_nth [simp]: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
147 |
"fls_X $$ n = (if n = 1 then 1 else 0)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
148 |
by (simp add: fls_X_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
149 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
150 |
lemma fls_X_nonzero [simp]: "(fls_X :: 'a :: zero_neq_one fls) \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
151 |
by (intro fls_nonzeroI) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
152 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
153 |
lift_definition fls_X_inv :: "'a::{zero,one} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
154 |
is "\<lambda>n. if n = -1 then 1 else 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
155 |
by (simp add: eventually_cofinite) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
156 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
157 |
lemma fls_X_inv_nth [simp]: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
158 |
"fls_X_inv $$ n = (if n = -1 then 1 else 0)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
159 |
by (simp add: fls_X_inv_def eventually_cofinite) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
160 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
161 |
lemma fls_X_inv_nonzero [simp]: "(fls_X_inv :: 'a :: zero_neq_one fls) \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
162 |
by (intro fls_nonzeroI) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
163 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
164 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
165 |
subsection \<open>Subdegrees\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
166 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
167 |
lemma unique_fls_subdegree: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
168 |
assumes "f \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
169 |
shows "\<exists>!n. f$$n \<noteq> 0 \<and> (\<forall>m. f$$m \<noteq> 0 \<longrightarrow> n \<le> m)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
170 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
171 |
obtain N::nat where N: "\<forall>n>N. f$$(-int n) = 0" by (elim fls_nth_vanishes_below_natE) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
172 |
define M where "M \<equiv> -int N" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
173 |
have M: "\<And>m. f$$m \<noteq> 0 \<Longrightarrow> M \<le> m" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
174 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
175 |
fix m assume m: "f$$m \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
176 |
show "M \<le> m" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
177 |
proof (cases "m<0") |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
178 |
case True with m N M_def show ?thesis |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
179 |
using allE[OF N, of "nat (-m)" False] by force |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
180 |
qed (simp add: M_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
181 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
182 |
have "\<not> (\<forall>k::nat. f$$(M + int k) = 0)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
183 |
proof |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
184 |
assume above0: "\<forall>k::nat. f$$(M + int k) = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
185 |
have "f=0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
186 |
proof (rule fls_zero_eqI) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
187 |
fix n show "f$$n = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
188 |
proof (cases "M \<le> n") |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
189 |
case True |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
190 |
define k where "k = nat (n - M)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
191 |
from True have "n = M + int k" by (simp add: k_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
192 |
with above0 show ?thesis by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
193 |
next |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
194 |
case False with M show ?thesis by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
195 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
196 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
197 |
with assms show False by fast |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
198 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
199 |
hence ex_k: "\<exists>k::nat. f$$(M + int k) \<noteq> 0" by fast |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
200 |
define k where "k \<equiv> (LEAST k::nat. f$$(M + int k) \<noteq> 0)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
201 |
define n where "n \<equiv> M + int k" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
202 |
from k_def n_def have fn: "f$$n \<noteq> 0" using LeastI_ex[OF ex_k] by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
203 |
moreover have "\<forall>m. f$$m \<noteq> 0 \<longrightarrow> n \<le> m" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
204 |
proof (clarify) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
205 |
fix m assume m: "f$$m \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
206 |
with M have "M \<le> m" by fast |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
207 |
define l where "l = nat (m - M)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
208 |
from \<open>M \<le> m\<close> have l: "m = M + int l" by (simp add: l_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
209 |
with n_def m k_def l show "n \<le> m" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
210 |
using Least_le[of "\<lambda>k. f$$(M + int k) \<noteq> 0" l] by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
211 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
212 |
moreover have "\<And>n'. f$$n' \<noteq> 0 \<Longrightarrow> (\<forall>m. f$$m \<noteq> 0 \<longrightarrow> n' \<le> m) \<Longrightarrow> n' = n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
213 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
214 |
fix n' :: int |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
215 |
assume n': "f$$n' \<noteq> 0" "\<forall>m. f$$m \<noteq> 0 \<longrightarrow> n' \<le> m" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
216 |
from n'(1) M have "M \<le> n'" by fast |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
217 |
define l where "l = nat (n' - M)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
218 |
from \<open>M \<le> n'\<close> have l: "n' = M + int l" by (simp add: l_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
219 |
with n_def k_def n' fn show "n' = n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
220 |
using Least_le[of "\<lambda>k. f$$(M + int k) \<noteq> 0" l] by force |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
221 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
222 |
ultimately show ?thesis |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
223 |
using ex1I[of "\<lambda>n. f$$n \<noteq> 0 \<and> (\<forall>m. f$$m \<noteq> 0 \<longrightarrow> n \<le> m)" n] by blast |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
224 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
225 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
226 |
definition fls_subdegree :: "('a::zero) fls \<Rightarrow> int" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
227 |
where "fls_subdegree f \<equiv> (if f = 0 then 0 else LEAST n::int. f$$n \<noteq> 0)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
228 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
229 |
lemma fls_zero_subdegree [simp]: "fls_subdegree 0 = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
230 |
by (simp add: fls_subdegree_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
231 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
232 |
lemma nth_fls_subdegree_nonzero [simp]: "f \<noteq> 0 \<Longrightarrow> f $$ fls_subdegree f \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
233 |
using Least1I[OF unique_fls_subdegree] by (simp add: fls_subdegree_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
234 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
235 |
lemma nth_fls_subdegree_zero_iff: "(f $$ fls_subdegree f = 0) \<longleftrightarrow> (f = 0)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
236 |
using nth_fls_subdegree_nonzero by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
237 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
238 |
lemma fls_subdegree_leI: "f $$ n \<noteq> 0 \<Longrightarrow> fls_subdegree f \<le> n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
239 |
using Least1_le[OF unique_fls_subdegree] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
240 |
by (auto simp: fls_subdegree_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
241 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
242 |
lemma fls_subdegree_leI': "f $$ n \<noteq> 0 \<Longrightarrow> n \<le> m \<Longrightarrow> fls_subdegree f \<le> m" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
243 |
using fls_subdegree_leI by fastforce |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
244 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
245 |
lemma fls_eq0_below_subdegree [simp]: "n < fls_subdegree f \<Longrightarrow> f $$ n = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
246 |
using fls_subdegree_leI by fastforce |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
247 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
248 |
lemma fls_subdegree_geI: "f \<noteq> 0 \<Longrightarrow> (\<And>k. k < n \<Longrightarrow> f $$ k = 0) \<Longrightarrow> n \<le> fls_subdegree f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
249 |
using nth_fls_subdegree_nonzero by force |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
250 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
251 |
lemma fls_subdegree_ge0I: "(\<And>k. k < 0 \<Longrightarrow> f $$ k = 0) \<Longrightarrow> 0 \<le> fls_subdegree f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
252 |
using fls_subdegree_geI[of f 0] by (cases "f=0") auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
253 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
254 |
lemma fls_subdegree_greaterI: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
255 |
assumes "f \<noteq> 0" "\<And>k. k \<le> n \<Longrightarrow> f $$ k = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
256 |
shows "n < fls_subdegree f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
257 |
using assms(1) assms(2)[of "fls_subdegree f"] nth_fls_subdegree_nonzero[of f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
258 |
by force |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
259 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
260 |
lemma fls_subdegree_eqI: "f $$ n \<noteq> 0 \<Longrightarrow> (\<And>k. k < n \<Longrightarrow> f $$ k = 0) \<Longrightarrow> fls_subdegree f = n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
261 |
using fls_subdegree_leI fls_subdegree_geI[of f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
262 |
by fastforce |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
263 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
264 |
lemma fls_delta_subdegree [simp]: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
265 |
"b \<noteq> 0 \<Longrightarrow> fls_subdegree (Abs_fls (\<lambda>n. if n=a then b else 0)) = a" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
266 |
by (intro fls_subdegree_eqI) simp_all |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
267 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
268 |
lemma fls_delta0_subdegree: "fls_subdegree (Abs_fls (\<lambda>n. if n=0 then a else 0)) = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
269 |
by (cases "a=0") simp_all |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
270 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
271 |
lemma fls_one_subdegree [simp]: "fls_subdegree 1 = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
272 |
by (auto intro: fls_delta0_subdegree simp: one_fls_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
273 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
274 |
lemma fls_const_subdegree [simp]: "fls_subdegree (fls_const c) = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
275 |
by (cases "c=0") (auto intro: fls_subdegree_eqI) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
276 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
277 |
lemma fls_X_subdegree [simp]: "fls_subdegree (fls_X::'a::{zero_neq_one} fls) = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
278 |
by (intro fls_subdegree_eqI) simp_all |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
279 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
280 |
lemma fls_X_inv_subdegree [simp]: "fls_subdegree (fls_X_inv::'a::{zero_neq_one} fls) = -1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
281 |
by (intro fls_subdegree_eqI) simp_all |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
282 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
283 |
lemma fls_eq_above_subdegreeI: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
284 |
assumes "N \<le> fls_subdegree f" "N \<le> fls_subdegree g" "\<forall>k\<ge>N. f $$ k = g $$ k" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
285 |
shows "f = g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
286 |
proof (rule fls_eqI) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
287 |
fix n from assms show "f $$ n = g $$ n" by (cases "n < N") auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
288 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
289 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
290 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
291 |
subsection \<open>Shifting\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
292 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
293 |
subsubsection \<open>Shift definition\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
294 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
295 |
definition fls_shift :: "int \<Rightarrow> ('a::zero) fls \<Rightarrow> 'a fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
296 |
where "fls_shift n f \<equiv> Abs_fls (\<lambda>k. f $$ (k+n))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
297 |
\<comment> \<open>Since the index set is unbounded in both directions, we can shift in either direction.\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
298 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
299 |
lemma fls_shift_nth [simp]: "fls_shift m f $$ n = f $$ (n+m)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
300 |
unfolding fls_shift_def |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
301 |
proof (rule nth_Abs_fls_ex_lower_bound) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
302 |
obtain K::int where K: "\<forall>n<K. f$$n = 0" by (elim fls_nth_vanishes_belowE) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
303 |
hence "\<forall>n<K-m. f$$(n+m) = 0" by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
304 |
thus "\<exists>N. \<forall>n<N. f $$ (n + m) = 0" by fast |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
305 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
306 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
307 |
lemma fls_shift_eq_iff: "(fls_shift m f = fls_shift m g) \<longleftrightarrow> (f = g)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
308 |
proof (rule iffI, rule fls_eqI) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
309 |
fix k |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
310 |
assume 1: "fls_shift m f = fls_shift m g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
311 |
have "f $$ k = fls_shift m g $$ (k - m)" by (simp add: 1[symmetric]) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
312 |
thus "f $$ k = g $$ k" by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
313 |
qed (intro fls_eqI, simp) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
314 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
315 |
lemma fls_shift_0 [simp]: "fls_shift 0 f = f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
316 |
by (intro fls_eqI) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
317 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
318 |
lemma fls_shift_subdegree [simp]: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
319 |
"f \<noteq> 0 \<Longrightarrow> fls_subdegree (fls_shift n f) = fls_subdegree f - n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
320 |
by (intro fls_subdegree_eqI) simp_all |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
321 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
322 |
lemma fls_shift_fls_shift [simp]: "fls_shift m (fls_shift k f) = fls_shift (k+m) f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
323 |
by (intro fls_eqI) (simp add: algebra_simps) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
324 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
325 |
lemma fls_shift_fls_shift_reorder: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
326 |
"fls_shift m (fls_shift k f) = fls_shift k (fls_shift m f)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
327 |
using fls_shift_fls_shift[of m k f] fls_shift_fls_shift[of k m f] by (simp add: add.commute) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
328 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
329 |
lemma fls_shift_zero [simp]: "fls_shift m 0 = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
330 |
by (intro fls_zero_eqI) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
331 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
332 |
lemma fls_shift_eq0_iff: "fls_shift m f = 0 \<longleftrightarrow> f = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
333 |
using fls_shift_eq_iff[of m f 0] by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
334 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
335 |
lemma fls_shift_nonneg_subdegree: "m \<le> fls_subdegree f \<Longrightarrow> fls_subdegree (fls_shift m f) \<ge> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
336 |
by (cases "f=0") (auto intro: fls_subdegree_geI) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
337 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
338 |
lemma fls_shift_delta: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
339 |
"fls_shift m (Abs_fls (\<lambda>n. if n=a then b else 0)) = Abs_fls (\<lambda>n. if n=a-m then b else 0)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
340 |
by (intro fls_eqI) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
341 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
342 |
lemma fls_shift_const: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
343 |
"fls_shift m (fls_const c) = Abs_fls (\<lambda>n. if n=-m then c else 0)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
344 |
by (intro fls_eqI) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
345 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
346 |
lemma fls_shift_const_nth: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
347 |
"fls_shift m (fls_const c) $$ n = (if n=-m then c else 0)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
348 |
by (simp add: fls_shift_const) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
349 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
350 |
lemma fls_X_conv_shift_1: "fls_X = fls_shift (-1) 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
351 |
by (intro fls_eqI) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
352 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
353 |
lemma fls_X_shift_to_one [simp]: "fls_shift 1 fls_X = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
354 |
using fls_shift_fls_shift[of "-1" 1 1] by (simp add: fls_X_conv_shift_1) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
355 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
356 |
lemma fls_X_inv_conv_shift_1: "fls_X_inv = fls_shift 1 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
357 |
by (intro fls_eqI) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
358 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
359 |
lemma fls_X_inv_shift_to_one [simp]: "fls_shift (-1) fls_X_inv = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
360 |
using fls_shift_fls_shift[of 1 "-1" 1] by (simp add: fls_X_inv_conv_shift_1) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
361 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
362 |
lemma fls_X_fls_X_inv_conv: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
363 |
"fls_X = fls_shift (-2) fls_X_inv" "fls_X_inv = fls_shift 2 fls_X" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
364 |
by (simp_all add: fls_X_conv_shift_1 fls_X_inv_conv_shift_1) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
365 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
366 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
367 |
subsubsection \<open>Base factor\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
368 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
369 |
text \<open> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
370 |
Similarly to the @{const unit_factor} for formal power series, we can decompose a formal Laurent |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
371 |
series as a power of the implied variable times a series of subdegree 0. |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
372 |
(See lemma @{text "fls_base_factor_X_power_decompose"}.) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
373 |
But we will call this something other @{const unit_factor} |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
374 |
because it will not satisfy assumption @{text "is_unit_unit_factor"} of |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
375 |
@{class semidom_divide_unit_factor}. |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
376 |
\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
377 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
378 |
definition fls_base_factor :: "('a::zero) fls \<Rightarrow> 'a fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
379 |
where fls_base_factor_def[simp]: "fls_base_factor f = fls_shift (fls_subdegree f) f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
380 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
381 |
lemma fls_base_factor_nth: "fls_base_factor f $$ n = f $$ (n + fls_subdegree f)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
382 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
383 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
384 |
lemma fls_base_factor_nonzero [simp]: "f \<noteq> 0 \<Longrightarrow> fls_base_factor f \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
385 |
using fls_nonzeroI[of "fls_base_factor f" 0] by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
386 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
387 |
lemma fls_base_factor_subdegree [simp]: "fls_subdegree (fls_base_factor f) = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
388 |
by (cases "f=0") auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
389 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
390 |
lemma fls_base_factor_base [simp]: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
391 |
"fls_base_factor f $$ fls_subdegree (fls_base_factor f) = f $$ fls_subdegree f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
392 |
using fls_base_factor_subdegree[of f] by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
393 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
394 |
lemma fls_conv_base_factor_shift_subdegree: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
395 |
"f = fls_shift (-fls_subdegree f) (fls_base_factor f)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
396 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
397 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
398 |
lemma fls_base_factor_idem: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
399 |
"fls_base_factor (fls_base_factor (f::'a::zero fls)) = fls_base_factor f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
400 |
using fls_base_factor_subdegree[of f] by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
401 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
402 |
lemma fls_base_factor_zero: "fls_base_factor (0::'a::zero fls) = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
403 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
404 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
405 |
lemma fls_base_factor_zero_iff: "fls_base_factor (f::'a::zero fls) = 0 \<longleftrightarrow> f = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
406 |
proof |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
407 |
have "fls_shift (-fls_subdegree f) (fls_shift (fls_subdegree f) f) = f" by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
408 |
thus "fls_base_factor f = 0 \<Longrightarrow> f=0" by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
409 |
qed simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
410 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
411 |
lemma fls_base_factor_nth_0: "f \<noteq> 0 \<Longrightarrow> fls_base_factor f $$ 0 \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
412 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
413 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
414 |
lemma fls_base_factor_one: "fls_base_factor (1::'a::{zero,one} fls) = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
415 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
416 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
417 |
lemma fls_base_factor_const: "fls_base_factor (fls_const c) = fls_const c" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
418 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
419 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
420 |
lemma fls_base_factor_delta: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
421 |
"fls_base_factor (Abs_fls (\<lambda>n. if n=a then c else 0)) = fls_const c" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
422 |
by (cases "c=0") (auto intro: fls_eqI) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
423 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
424 |
lemma fls_base_factor_X: "fls_base_factor (fls_X::'a::{zero_neq_one} fls) = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
425 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
426 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
427 |
lemma fls_base_factor_X_inv: "fls_base_factor (fls_X_inv::'a::{zero_neq_one} fls) = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
428 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
429 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
430 |
lemma fls_base_factor_shift [simp]: "fls_base_factor (fls_shift n f) = fls_base_factor f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
431 |
by (cases "f=0") simp_all |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
432 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
433 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
434 |
subsection \<open>Conversion between formal power and Laurent series\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
435 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
436 |
subsubsection \<open>Converting Laurent to power series\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
437 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
438 |
text \<open> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
439 |
We can truncate a Laurent series at index 0 to create a power series, called the regular part. |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
440 |
\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
441 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
442 |
lift_definition fls_regpart :: "('a::zero) fls \<Rightarrow> 'a fps" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
443 |
is "\<lambda>f. Abs_fps (\<lambda>n. f (int n))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
444 |
. |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
445 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
446 |
lemma fls_regpart_nth [simp]: "fls_regpart f $ n = f $$ (int n)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
447 |
by (simp add: fls_regpart_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
448 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
449 |
lemma fls_regpart_zero [simp]: "fls_regpart 0 = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
450 |
by (intro fps_ext) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
451 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
452 |
lemma fls_regpart_one [simp]: "fls_regpart 1 = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
453 |
by (intro fps_ext) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
454 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
455 |
lemma fls_regpart_Abs_fls: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
456 |
"\<forall>\<^sub>\<infinity>n. F (- int n) = 0 \<Longrightarrow> fls_regpart (Abs_fls F) = Abs_fps (\<lambda>n. F (int n))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
457 |
by (intro fps_ext) auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
458 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
459 |
lemma fls_regpart_delta: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
460 |
"fls_regpart (Abs_fls (\<lambda>n. if n=a then b else 0)) = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
461 |
(if a < 0 then 0 else Abs_fps (\<lambda>n. if n=nat a then b else 0))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
462 |
by (rule fps_ext, auto) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
463 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
464 |
lemma fls_regpart_const [simp]: "fls_regpart (fls_const c) = fps_const c" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
465 |
by (intro fps_ext) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
466 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
467 |
lemma fls_regpart_fls_X [simp]: "fls_regpart fls_X = fps_X" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
468 |
by (intro fps_ext) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
469 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
470 |
lemma fls_regpart_fls_X_inv [simp]: "fls_regpart fls_X_inv = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
471 |
by (intro fps_ext) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
472 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
473 |
lemma fls_regpart_eq0_imp_nonpos_subdegree: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
474 |
assumes "fls_regpart f = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
475 |
shows "fls_subdegree f \<le> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
476 |
proof (cases "f=0") |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
477 |
case False |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
478 |
have "fls_subdegree f \<ge> 0 \<Longrightarrow> f $$ fls_subdegree f = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
479 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
480 |
assume "fls_subdegree f \<ge> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
481 |
hence "f $$ (fls_subdegree f) = (fls_regpart f) $ (nat (fls_subdegree f))" by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
482 |
with assms show "f $$ (fls_subdegree f) = 0" by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
483 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
484 |
with False show ?thesis by fastforce |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
485 |
qed simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
486 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
487 |
lemma fls_subdegree_lt_fls_regpart_subdegree: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
488 |
"fls_subdegree f \<le> int (subdegree (fls_regpart f))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
489 |
using fls_subdegree_leI nth_subdegree_nonzero[of "fls_regpart f"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
490 |
by (cases "(fls_regpart f) = 0") |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
491 |
(simp_all add: fls_regpart_eq0_imp_nonpos_subdegree) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
492 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
493 |
lemma fls_regpart_subdegree_conv: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
494 |
assumes "fls_subdegree f \<ge> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
495 |
shows "subdegree (fls_regpart f) = nat (fls_subdegree f)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
496 |
\<comment>\<open> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
497 |
This is the best we can do since if the subdegree is negative, we might still have the bad luck |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
498 |
that the term at index 0 is equal to 0. |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
499 |
\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
500 |
proof (cases "f=0") |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
501 |
case False with assms show ?thesis by (intro subdegreeI) simp_all |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
502 |
qed simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
503 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
504 |
lemma fls_eq_conv_fps_eqI: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
505 |
assumes "0 \<le> fls_subdegree f" "0 \<le> fls_subdegree g" "fls_regpart f = fls_regpart g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
506 |
shows "f = g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
507 |
proof (rule fls_eq_above_subdegreeI, rule assms(1), rule assms(2), clarify) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
508 |
fix k::int assume "0 \<le> k" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
509 |
with assms(3) show "f $$ k = g $$ k" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
510 |
using fls_regpart_nth[of f "nat k"] fls_regpart_nth[of g] by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
511 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
512 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
513 |
lemma fls_regpart_shift_conv_fps_shift: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
514 |
"m \<ge> 0 \<Longrightarrow> fls_regpart (fls_shift m f) = fps_shift (nat m) (fls_regpart f)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
515 |
by (intro fps_ext) simp_all |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
516 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
517 |
lemma fps_shift_fls_regpart_conv_fls_shift: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
518 |
"fps_shift m (fls_regpart f) = fls_regpart (fls_shift m f)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
519 |
by (intro fps_ext) simp_all |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
520 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
521 |
lemma fps_unit_factor_fls_regpart: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
522 |
"fls_subdegree f \<ge> 0 \<Longrightarrow> unit_factor (fls_regpart f) = fls_regpart (fls_base_factor f)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
523 |
by (auto intro: fps_ext simp: fls_regpart_subdegree_conv) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
524 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
525 |
text \<open> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
526 |
The terms below the zeroth form a polynomial in the inverse of the implied variable, |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
527 |
called the principle part. |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
528 |
\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
529 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
530 |
lift_definition fls_prpart :: "('a::zero) fls \<Rightarrow> 'a poly" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
531 |
is "\<lambda>f. Abs_poly (\<lambda>n. if n = 0 then 0 else f (- int n))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
532 |
. |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
533 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
534 |
lemma fls_prpart_coeff [simp]: "coeff (fls_prpart f) n = (if n = 0 then 0 else f $$ (- int n))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
535 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
536 |
have "{x. (if x = 0 then 0 else f $$ - int x) \<noteq> 0} \<subseteq> {x. f $$ - int x \<noteq> 0}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
537 |
by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
538 |
hence "finite {x. (if x = 0 then 0 else f $$ - int x) \<noteq> 0}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
539 |
using fls_finite_nonzero_neg_nth[of f] by (simp add: rev_finite_subset) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
540 |
hence "coeff (fls_prpart f) = (\<lambda>n. if n = 0 then 0 else f $$ (- int n))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
541 |
using Abs_poly_inverse[OF CollectI, OF iffD2, OF eventually_cofinite] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
542 |
by (simp add: fls_prpart_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
543 |
thus ?thesis by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
544 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
545 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
546 |
lemma fls_prpart_eq0_iff: "(fls_prpart f = 0) \<longleftrightarrow> (fls_subdegree f \<ge> 0)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
547 |
proof |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
548 |
assume 1: "fls_prpart f = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
549 |
show "fls_subdegree f \<ge> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
550 |
proof (intro fls_subdegree_ge0I) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
551 |
fix k::int assume "k < 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
552 |
with 1 show "f $$ k = 0" using fls_prpart_coeff[of f "nat (-k)"] by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
553 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
554 |
qed (intro poly_eqI, simp) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
555 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
556 |
lemma fls_prpart0 [simp]: "fls_prpart 0 = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
557 |
by (simp add: fls_prpart_eq0_iff) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
558 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
559 |
lemma fls_prpart_one [simp]: "fls_prpart 1 = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
560 |
by (simp add: fls_prpart_eq0_iff) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
561 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
562 |
lemma fls_prpart_delta: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
563 |
"fls_prpart (Abs_fls (\<lambda>n. if n=a then b else 0)) = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
564 |
(if a<0 then Poly (replicate (nat (-a)) 0 @ [b]) else 0)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
565 |
by (intro poly_eqI) (auto simp: nth_default_def nth_append) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
566 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
567 |
lemma fls_prpart_const [simp]: "fls_prpart (fls_const c) = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
568 |
by (simp add: fls_prpart_eq0_iff) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
569 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
570 |
lemma fls_prpart_X [simp]: "fls_prpart fls_X = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
571 |
by (intro poly_eqI) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
572 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
573 |
lemma fls_prpart_X_inv: "fls_prpart fls_X_inv = [:0,1:]" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
574 |
proof (intro poly_eqI) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
575 |
fix n show "coeff (fls_prpart fls_X_inv) n = coeff [:0,1:] n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
576 |
proof (cases n) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
577 |
case (Suc i) thus ?thesis by (cases i) simp_all |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
578 |
qed simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
579 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
580 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
581 |
lemma degree_fls_prpart [simp]: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
582 |
"degree (fls_prpart f) = nat (-fls_subdegree f)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
583 |
proof (cases "f=0") |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
584 |
case False show ?thesis unfolding degree_def |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
585 |
proof (intro Least_equality) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
586 |
fix N assume N: "\<forall>i>N. coeff (fls_prpart f) i = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
587 |
have "\<forall>i < -int N. f $$ i = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
588 |
proof clarify |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
589 |
fix i assume i: "i < -int N" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
590 |
hence "nat (-i) > N" by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
591 |
with N i show "f $$ i = 0" using fls_prpart_coeff[of f "nat (-i)"] by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
592 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
593 |
with False have "fls_subdegree f \<ge> -int N" using fls_subdegree_geI by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
594 |
thus "nat (- fls_subdegree f) \<le> N" by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
595 |
qed auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
596 |
qed simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
597 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
598 |
lemma fls_prpart_shift: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
599 |
assumes "m \<le> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
600 |
shows "fls_prpart (fls_shift m f) = pCons 0 (poly_shift (Suc (nat (-m))) (fls_prpart f))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
601 |
proof (intro poly_eqI) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
602 |
fix n |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
603 |
define LHS RHS |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
604 |
where "LHS \<equiv> fls_prpart (fls_shift m f)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
605 |
and "RHS \<equiv> pCons 0 (poly_shift (Suc (nat (-m))) (fls_prpart f))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
606 |
show "coeff LHS n = coeff RHS n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
607 |
proof (cases n) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
608 |
case (Suc k) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
609 |
from assms have 1: "-int (Suc k + nat (-m)) = -int (Suc k) + m" by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
610 |
have "coeff RHS n = f $$ (-int (Suc k) + m)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
611 |
using arg_cong[OF 1, of "($$) f"] by (simp add: Suc RHS_def coeff_poly_shift) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
612 |
with Suc show ?thesis by (simp add: LHS_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
613 |
qed (simp add: LHS_def RHS_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
614 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
615 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
616 |
lemma fls_prpart_base_factor: "fls_prpart (fls_base_factor f) = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
617 |
using fls_base_factor_subdegree[of f] by (simp add: fls_prpart_eq0_iff) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
618 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
619 |
text \<open>The essential data of a formal Laurant series resides from the subdegree up.\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
620 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
621 |
abbreviation fls_base_factor_to_fps :: "('a::zero) fls \<Rightarrow> 'a fps" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
622 |
where "fls_base_factor_to_fps f \<equiv> fls_regpart (fls_base_factor f)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
623 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
624 |
lemma fls_base_factor_to_fps_conv_fps_shift: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
625 |
assumes "fls_subdegree f \<ge> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
626 |
shows "fls_base_factor_to_fps f = fps_shift (nat (fls_subdegree f)) (fls_regpart f)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
627 |
by (simp add: assms fls_regpart_shift_conv_fps_shift) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
628 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
629 |
lemma fls_base_factor_to_fps_nth: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
630 |
"fls_base_factor_to_fps f $ n = f $$ (fls_subdegree f + int n)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
631 |
by (simp add: algebra_simps) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
632 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
633 |
lemma fls_base_factor_to_fps_base: "f \<noteq> 0 \<Longrightarrow> fls_base_factor_to_fps f $ 0 \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
634 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
635 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
636 |
lemma fls_base_factor_to_fps_nonzero: "f \<noteq> 0 \<Longrightarrow> fls_base_factor_to_fps f \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
637 |
using fps_nonzeroI[of "fls_base_factor_to_fps f" 0] fls_base_factor_to_fps_base by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
638 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
639 |
lemma fls_base_factor_to_fps_subdegree [simp]: "subdegree (fls_base_factor_to_fps f) = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
640 |
by (cases "f=0") auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
641 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
642 |
lemma fls_base_factor_to_fps_trivial: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
643 |
"fls_subdegree f = 0 \<Longrightarrow> fls_base_factor_to_fps f = fls_regpart f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
644 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
645 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
646 |
lemma fls_base_factor_to_fps_zero: "fls_base_factor_to_fps 0 = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
647 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
648 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
649 |
lemma fls_base_factor_to_fps_one: "fls_base_factor_to_fps 1 = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
650 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
651 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
652 |
lemma fls_base_factor_to_fps_delta: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
653 |
"fls_base_factor_to_fps (Abs_fls (\<lambda>n. if n=a then c else 0)) = fps_const c" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
654 |
using fls_base_factor_delta[of a c] by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
655 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
656 |
lemma fls_base_factor_to_fps_const: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
657 |
"fls_base_factor_to_fps (fls_const c) = fps_const c" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
658 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
659 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
660 |
lemma fls_base_factor_to_fps_X: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
661 |
"fls_base_factor_to_fps (fls_X::'a::{zero_neq_one} fls) = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
662 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
663 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
664 |
lemma fls_base_factor_to_fps_X_inv: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
665 |
"fls_base_factor_to_fps (fls_X_inv::'a::{zero_neq_one} fls) = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
666 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
667 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
668 |
lemma fls_base_factor_to_fps_shift: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
669 |
"fls_base_factor_to_fps (fls_shift m f) = fls_base_factor_to_fps f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
670 |
using fls_base_factor_shift[of m f] by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
671 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
672 |
lemma fls_base_factor_to_fps_base_factor: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
673 |
"fls_base_factor_to_fps (fls_base_factor f) = fls_base_factor_to_fps f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
674 |
using fls_base_factor_to_fps_shift by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
675 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
676 |
lemma fps_unit_factor_fls_base_factor: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
677 |
"unit_factor (fls_base_factor_to_fps f) = fls_base_factor_to_fps f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
678 |
using fls_base_factor_to_fps_subdegree[of f] by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
679 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
680 |
subsubsection \<open>Converting power to Laurent series\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
681 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
682 |
text \<open>We can extend a power series by 0s below to create a Laurent series.\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
683 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
684 |
definition fps_to_fls :: "('a::zero) fps \<Rightarrow> 'a fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
685 |
where "fps_to_fls f \<equiv> Abs_fls (\<lambda>k::int. if k<0 then 0 else f $ (nat k))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
686 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
687 |
lemma fps_to_fls_nth [simp]: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
688 |
"(fps_to_fls f) $$ n = (if n < 0 then 0 else f$(nat n))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
689 |
using nth_Abs_fls_lower_bound[of 0 "(\<lambda>k::int. if k<0 then 0 else f $ (nat k))"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
690 |
unfolding fps_to_fls_def |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
691 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
692 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
693 |
lemma fps_to_fls_eq_imp_fps_eq: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
694 |
assumes "fps_to_fls f = fps_to_fls g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
695 |
shows "f = g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
696 |
proof (intro fps_ext) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
697 |
fix n |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
698 |
have "f $ n = fps_to_fls g $$ int n" by (simp add: assms[symmetric]) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
699 |
thus "f $ n = g $ n" by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
700 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
701 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
702 |
lemma fps_zero_to_fls [simp]: "fps_to_fls 0 = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
703 |
by (intro fls_zero_eqI) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
704 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
705 |
lemma fps_to_fls_nonzeroI: "f \<noteq> 0 \<Longrightarrow> fps_to_fls f \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
706 |
using fps_to_fls_eq_imp_fps_eq[of f 0] by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
707 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
708 |
lemma fps_one_to_fls [simp]: "fps_to_fls 1 = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
709 |
by (intro fls_eqI) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
710 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
711 |
lemma fps_to_fls_Abs_fps: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
712 |
"fps_to_fls (Abs_fps F) = Abs_fls (\<lambda>n. if n<0 then 0 else F (nat n))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
713 |
using nth_Abs_fls_lower_bound[of 0 "(\<lambda>n::int. if n<0 then 0 else F (nat n))"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
714 |
by (intro fls_eqI) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
715 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
716 |
lemma fps_delta_to_fls: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
717 |
"fps_to_fls (Abs_fps (\<lambda>n. if n=a then b else 0)) = Abs_fls (\<lambda>n. if n=int a then b else 0)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
718 |
using fls_eqI[of _ "Abs_fls (\<lambda>n. if n=int a then b else 0)"] by force |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
719 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
720 |
lemma fps_const_to_fls [simp]: "fps_to_fls (fps_const c) = fls_const c" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
721 |
by (intro fls_eqI) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
722 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
723 |
lemma fps_X_to_fls [simp]: "fps_to_fls fps_X = fls_X" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
724 |
by (fastforce intro: fls_eqI) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
725 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
726 |
lemma fps_to_fls_eq_zero_iff: "(fps_to_fls f = 0) \<longleftrightarrow> (f=0)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
727 |
using fps_to_fls_nonzeroI by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
728 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
729 |
lemma fls_subdegree_fls_to_fps_gt0: "fls_subdegree (fps_to_fls f) \<ge> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
730 |
proof (cases "f=0") |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
731 |
case False show ?thesis |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
732 |
proof (rule fls_subdegree_geI, rule fls_nonzeroI) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
733 |
from False show "fps_to_fls f $$ int (subdegree f) \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
734 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
735 |
qed simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
736 |
qed simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
737 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
738 |
lemma fls_subdegree_fls_to_fps: "fls_subdegree (fps_to_fls f) = int (subdegree f)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
739 |
proof (cases "f=0") |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
740 |
case False |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
741 |
have "subdegree f = nat (fls_subdegree (fps_to_fls f))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
742 |
proof (rule subdegreeI) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
743 |
from False show "f $ (nat (fls_subdegree (fps_to_fls f))) \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
744 |
using fls_subdegree_fls_to_fps_gt0[of f] nth_fls_subdegree_nonzero[of "fps_to_fls f"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
745 |
fps_to_fls_nonzeroI[of f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
746 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
747 |
next |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
748 |
fix k assume k: "k < nat (fls_subdegree (fps_to_fls f))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
749 |
thus "f $ k = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
750 |
using fls_eq0_below_subdegree[of "int k" "fps_to_fls f"] by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
751 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
752 |
thus ?thesis by (simp add: fls_subdegree_fls_to_fps_gt0) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
753 |
qed simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
754 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
755 |
lemma fps_shift_to_fls [simp]: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
756 |
"n \<le> subdegree f \<Longrightarrow> fps_to_fls (fps_shift n f) = fls_shift (int n) (fps_to_fls f)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
757 |
by (auto intro: fls_eqI simp: nat_add_distrib nth_less_subdegree_zero) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
758 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
759 |
lemma fls_base_factor_fps_to_fls: "fls_base_factor (fps_to_fls f) = fps_to_fls (unit_factor f)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
760 |
using nth_less_subdegree_zero[of _ f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
761 |
by (auto intro: fls_eqI simp: fls_subdegree_fls_to_fps nat_add_distrib) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
762 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
763 |
lemma fls_regpart_to_fls_trivial [simp]: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
764 |
"fls_subdegree f \<ge> 0 \<Longrightarrow> fps_to_fls (fls_regpart f) = f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
765 |
by (intro fls_eqI) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
766 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
767 |
lemma fls_regpart_fps_trivial [simp]: "fls_regpart (fps_to_fls f) = f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
768 |
by (intro fps_ext) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
769 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
770 |
lemma fps_to_fls_base_factor_to_fps: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
771 |
"fps_to_fls (fls_base_factor_to_fps f) = fls_base_factor f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
772 |
by (intro fls_eqI) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
773 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
774 |
lemma fls_conv_base_factor_to_fps_shift_subdegree: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
775 |
"f = fls_shift (-fls_subdegree f) (fps_to_fls (fls_base_factor_to_fps f))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
776 |
using fps_to_fls_base_factor_to_fps[of f] fps_to_fls_base_factor_to_fps[of f] by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
777 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
778 |
lemma fls_base_factor_to_fps_to_fls: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
779 |
"fls_base_factor_to_fps (fps_to_fls f) = unit_factor f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
780 |
using fls_base_factor_fps_to_fls[of f] fls_regpart_fps_trivial[of "unit_factor f"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
781 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
782 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
783 |
abbreviation |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
784 |
"fls_regpart_as_fls f \<equiv> fps_to_fls (fls_regpart f)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
785 |
abbreviation |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
786 |
"fls_prpart_as_fls f \<equiv> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
787 |
fls_shift (-fls_subdegree f) (fps_to_fls (fps_of_poly (reflect_poly (fls_prpart f))))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
788 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
789 |
lemma fls_regpart_as_fls_nth: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
790 |
"fls_regpart_as_fls f $$ n = (if n < 0 then 0 else f $$ n)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
791 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
792 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
793 |
lemma fls_regpart_idem: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
794 |
"fls_regpart (fls_regpart_as_fls f) = fls_regpart f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
795 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
796 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
797 |
lemma fls_prpart_as_fls_nth: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
798 |
"fls_prpart_as_fls f $$ n = (if n < 0 then f $$ n else 0)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
799 |
proof (cases "n < fls_subdegree f" "n < 0" rule: case_split[case_product case_split]) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
800 |
case False_True |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
801 |
hence "nat (-fls_subdegree f) - nat (n - fls_subdegree f) = nat (-n)" by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
802 |
with False_True show ?thesis |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
803 |
using coeff_reflect_poly[of "fls_prpart f" "nat (n - fls_subdegree f)"] by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
804 |
next |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
805 |
case False_False thus ?thesis |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
806 |
using coeff_reflect_poly[of "fls_prpart f" "nat (n - fls_subdegree f)"] by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
807 |
qed simp_all |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
808 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
809 |
lemma fls_prpart_idem [simp]: "fls_prpart (fls_prpart_as_fls f) = fls_prpart f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
810 |
using fls_prpart_as_fls_nth[of f] by (intro poly_eqI) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
811 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
812 |
lemma fls_regpart_prpart: "fls_regpart (fls_prpart_as_fls f) = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
813 |
using fls_prpart_as_fls_nth[of f] by (intro fps_ext) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
814 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
815 |
lemma fls_prpart_regpart: "fls_prpart (fls_regpart_as_fls f) = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
816 |
by (intro poly_eqI) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
817 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
818 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
819 |
subsection \<open>Algebraic structures\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
820 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
821 |
subsubsection \<open>Addition\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
822 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
823 |
instantiation fls :: (monoid_add) plus |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
824 |
begin |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
825 |
lift_definition plus_fls :: "'a fls \<Rightarrow> 'a fls \<Rightarrow> 'a fls" is "\<lambda>f g n. f n + g n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
826 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
827 |
fix f f' :: "int \<Rightarrow> 'a" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
828 |
assume "\<forall>\<^sub>\<infinity>n. f (- int n) = 0" "\<forall>\<^sub>\<infinity>n. f' (- int n) = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
829 |
from this obtain N N' where "\<forall>n>N. f (-int n) = 0" "\<forall>n>N'. f' (-int n) = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
830 |
by (auto simp: MOST_nat) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
831 |
hence "\<forall>n > max N N'. f (-int n) + f' (-int n) = 0" by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
832 |
hence "\<exists>K. \<forall>n>K. f (-int n) + f' (-int n) = 0" by fast |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
833 |
thus "\<forall>\<^sub>\<infinity>n. f (- int n) + f' (-int n) = 0" by (simp add: MOST_nat) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
834 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
835 |
instance .. |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
836 |
end |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
837 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
838 |
lemma fls_plus_nth [simp]: "(f + g) $$ n = f $$ n + g $$ n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
839 |
by transfer simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
840 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
841 |
lemma fls_plus_const: "fls_const x + fls_const y = fls_const (x+y)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
842 |
by (intro fls_eqI) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
843 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
844 |
lemma fls_plus_subdegree: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
845 |
"f + g \<noteq> 0 \<Longrightarrow> fls_subdegree (f + g) \<ge> min (fls_subdegree f) (fls_subdegree g)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
846 |
by (auto intro: fls_subdegree_geI) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
847 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
848 |
lemma fls_shift_plus [simp]: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
849 |
"fls_shift m (f + g) = (fls_shift m f) + (fls_shift m g)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
850 |
by (intro fls_eqI) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
851 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
852 |
lemma fls_regpart_plus [simp]: "fls_regpart (f + g) = fls_regpart f + fls_regpart g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
853 |
by (intro fps_ext) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
854 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
855 |
lemma fls_prpart_plus [simp] : "fls_prpart (f + g) = fls_prpart f + fls_prpart g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
856 |
by (intro poly_eqI) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
857 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
858 |
lemma fls_decompose_reg_pr_parts: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
859 |
fixes f :: "'a :: monoid_add fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
860 |
defines "R \<equiv> fls_regpart_as_fls f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
861 |
and "P \<equiv> fls_prpart_as_fls f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
862 |
shows "f = P + R" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
863 |
and "f = R + P" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
864 |
using fls_prpart_as_fls_nth[of f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
865 |
by (auto intro: fls_eqI simp add: assms) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
866 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
867 |
lemma fps_to_fls_plus [simp]: "fps_to_fls (f + g) = fps_to_fls f + fps_to_fls g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
868 |
by (intro fls_eqI) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
869 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
870 |
instance fls :: (monoid_add) monoid_add |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
871 |
proof |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
872 |
fix a b c :: "'a fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
873 |
show "a + b + c = a + (b + c)" by transfer (simp add: add.assoc) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
874 |
show "0 + a = a" by transfer simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
875 |
show "a + 0 = a" by transfer simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
876 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
877 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
878 |
instance fls :: (comm_monoid_add) comm_monoid_add |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
879 |
by (standard, transfer, auto simp: add.commute) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
880 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
881 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
882 |
subsubsection \<open>Subtraction and negatives\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
883 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
884 |
instantiation fls :: (group_add) minus |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
885 |
begin |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
886 |
lift_definition minus_fls :: "'a fls \<Rightarrow> 'a fls \<Rightarrow> 'a fls" is "\<lambda>f g n. f n - g n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
887 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
888 |
fix f f' :: "int \<Rightarrow> 'a" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
889 |
assume "\<forall>\<^sub>\<infinity>n. f (- int n) = 0" "\<forall>\<^sub>\<infinity>n. f' (- int n) = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
890 |
from this obtain N N' where "\<forall>n>N. f (-int n) = 0" "\<forall>n>N'. f' (-int n) = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
891 |
by (auto simp: MOST_nat) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
892 |
hence "\<forall>n > max N N'. f (-int n) - f' (-int n) = 0" by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
893 |
hence "\<exists>K. \<forall>n>K. f (-int n) - f' (-int n) = 0" by fast |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
894 |
thus "\<forall>\<^sub>\<infinity>n. f (- int n) - f' (-int n) = 0" by (simp add: MOST_nat) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
895 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
896 |
instance .. |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
897 |
end |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
898 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
899 |
lemma fls_minus_nth [simp]: "(f - g) $$ n = f $$ n - g $$ n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
900 |
by transfer simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
901 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
902 |
lemma fls_minus_const: "fls_const x - fls_const y = fls_const (x-y)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
903 |
by (intro fls_eqI) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
904 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
905 |
lemma fls_subdegree_minus: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
906 |
"f - g \<noteq> 0 \<Longrightarrow> fls_subdegree (f - g) \<ge> min (fls_subdegree f) (fls_subdegree g)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
907 |
by (intro fls_subdegree_geI) simp_all |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
908 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
909 |
lemma fls_shift_minus [simp]: "fls_shift m (f - g) = (fls_shift m f) - (fls_shift m g)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
910 |
by (auto intro: fls_eqI) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
911 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
912 |
lemma fls_regpart_minus [simp]: "fls_regpart (f - g) = fls_regpart f - fls_regpart g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
913 |
by (intro fps_ext) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
914 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
915 |
lemma fls_prpart_minus [simp] : "fls_prpart (f - g) = fls_prpart f - fls_prpart g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
916 |
by (intro poly_eqI) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
917 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
918 |
lemma fps_to_fls_minus [simp]: "fps_to_fls (f - g) = fps_to_fls f - fps_to_fls g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
919 |
by (intro fls_eqI) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
920 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
921 |
instantiation fls :: (group_add) uminus |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
922 |
begin |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
923 |
lift_definition uminus_fls :: "'a fls \<Rightarrow> 'a fls" is "\<lambda>f n. - f n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
924 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
925 |
fix f :: "int \<Rightarrow> 'a" assume "\<forall>\<^sub>\<infinity>n. f (- int n) = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
926 |
from this obtain N where "\<forall>n>N. f (-int n) = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
927 |
by (auto simp: MOST_nat) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
928 |
hence "\<forall>n>N. - f (-int n) = 0" by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
929 |
hence "\<exists>K. \<forall>n>K. - f (-int n) = 0" by fast |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
930 |
thus "\<forall>\<^sub>\<infinity>n. - f (- int n) = 0" by (simp add: MOST_nat) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
931 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
932 |
instance .. |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
933 |
end |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
934 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
935 |
lemma fls_uminus_nth [simp]: "(-f) $$ n = - (f $$ n)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
936 |
by transfer simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
937 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
938 |
lemma fls_const_uminus[simp]: "fls_const (-x) = -fls_const x" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
939 |
by (intro fls_eqI) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
940 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
941 |
lemma fls_shift_uminus [simp]: "fls_shift m (- f) = - (fls_shift m f)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
942 |
by (auto intro: fls_eqI) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
943 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
944 |
lemma fls_regpart_uminus [simp]: "fls_regpart (- f) = - fls_regpart f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
945 |
by (intro fps_ext) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
946 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
947 |
lemma fls_prpart_uminus [simp] : "fls_prpart (- f) = - fls_prpart f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
948 |
by (intro poly_eqI) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
949 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
950 |
lemma fps_to_fls_uminus [simp]: "fps_to_fls (- f) = - fps_to_fls f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
951 |
by (intro fls_eqI) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
952 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
953 |
instance fls :: (group_add) group_add |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
954 |
proof |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
955 |
fix a b :: "'a fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
956 |
show "- a + a = 0" by transfer simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
957 |
show "a + - b = a - b" by transfer simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
958 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
959 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
960 |
instance fls :: (ab_group_add) ab_group_add |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
961 |
proof |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
962 |
fix a b :: "'a fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
963 |
show "- a + a = 0" by transfer simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
964 |
show "a - b = a + - b" by transfer simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
965 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
966 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
967 |
lemma fls_uminus_subdegree [simp]: "fls_subdegree (-f) = fls_subdegree f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
968 |
by (cases "f=0") (auto intro: fls_subdegree_eqI) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
969 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
970 |
lemma fls_subdegree_minus_sym: "fls_subdegree (g - f) = fls_subdegree (f - g)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
971 |
using fls_uminus_subdegree[of "g-f"] by (simp add: algebra_simps) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
972 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
973 |
lemma fls_regpart_sub_prpart: "fls_regpart (f - fls_prpart_as_fls f) = fls_regpart f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
974 |
using fls_decompose_reg_pr_parts(2)[of f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
975 |
add_diff_cancel[of "fls_regpart_as_fls f" "fls_prpart_as_fls f"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
976 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
977 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
978 |
lemma fls_prpart_sub_regpart: "fls_prpart (f - fls_regpart_as_fls f) = fls_prpart f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
979 |
using fls_decompose_reg_pr_parts(1)[of f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
980 |
add_diff_cancel[of "fls_prpart_as_fls f" "fls_regpart_as_fls f"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
981 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
982 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
983 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
984 |
subsubsection \<open>Multiplication\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
985 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
986 |
instantiation fls :: ("{comm_monoid_add, times}") times |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
987 |
begin |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
988 |
definition fls_times_def: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
989 |
"(*) = (\<lambda>f g. |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
990 |
fls_shift |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
991 |
(- (fls_subdegree f + fls_subdegree g)) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
992 |
(fps_to_fls (fls_base_factor_to_fps f * fls_base_factor_to_fps g)) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
993 |
)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
994 |
instance .. |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
995 |
end |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
996 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
997 |
lemma fls_times_nth_eq0: "n < fls_subdegree f + fls_subdegree g \<Longrightarrow> (f * g) $$ n = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
998 |
by (simp add: fls_times_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
999 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1000 |
lemma fls_times_nth: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1001 |
fixes f df g dg |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1002 |
defines "df \<equiv> fls_subdegree f" and "dg \<equiv> fls_subdegree g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1003 |
shows "(f * g) $$ n = (\<Sum>i=df + dg..n. f $$ (i - dg) * g $$ (dg + n - i))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1004 |
and "(f * g) $$ n = (\<Sum>i=df..n - dg. f $$ i * g $$ (n - i))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1005 |
and "(f * g) $$ n = (\<Sum>i=dg..n - df. f $$ (df + i - dg) * g $$ (dg + n - df - i))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1006 |
and "(f * g) $$ n = (\<Sum>i=0..n - (df + dg). f $$ (df + i) * g $$ (n - df - i))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1007 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1008 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1009 |
define dfg where "dfg \<equiv> df + dg" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1010 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1011 |
show 4: "(f * g) $$ n = (\<Sum>i=0..n - dfg. f $$ (df + i) * g $$ (n - df - i))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1012 |
proof (cases "n < dfg") |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1013 |
case False |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1014 |
from False assms have |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1015 |
"(f * g) $$ n = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1016 |
(\<Sum>i = 0..nat (n - dfg). f $$ (df + int i) * g $$ (dg + int (nat (n - dfg) - i)))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1017 |
using fps_mult_nth[of "fls_base_factor_to_fps f" "fls_base_factor_to_fps g"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1018 |
fls_base_factor_to_fps_nth[of f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1019 |
fls_base_factor_to_fps_nth[of g] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1020 |
by (simp add: dfg_def fls_times_def algebra_simps) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1021 |
moreover from False have index: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1022 |
"\<And>i. i \<in> {0..nat (n - dfg)} \<Longrightarrow> dg + int (nat (n - dfg) - i) = n - df - int i" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1023 |
by (auto simp: dfg_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1024 |
ultimately have |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1025 |
"(f * g) $$ n = (\<Sum>i=0..nat (n - dfg). f $$ (df + int i) * g $$ (n - df - int i))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1026 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1027 |
moreover have |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1028 |
"(\<Sum>i=0..nat (n - dfg). f $$ (df + int i) * g $$ (n - df - int i)) = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1029 |
(\<Sum>i=0..n - dfg. f $$ (df + i) * g $$ (n - df - i))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1030 |
proof (intro sum.reindex_cong) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1031 |
show "inj_on nat {0..n - dfg}" by standard auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1032 |
show "{0..nat (n - dfg)} = nat ` {0..n - dfg}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1033 |
proof |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1034 |
show "{0..nat (n - dfg)} \<subseteq> nat ` {0..n - dfg}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1035 |
proof |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1036 |
fix i assume "i \<in> {0..nat (n - dfg)}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1037 |
hence i: "i \<ge> 0" "i \<le> nat (n - dfg)" by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1038 |
with False have "int i \<ge> 0" "int i \<le> n - dfg" by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1039 |
hence "int i \<in> {0..n - dfg}" by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1040 |
moreover from i(1) have "i = nat (int i)" by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1041 |
ultimately show "i \<in> nat ` {0..n - dfg}" by fast |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1042 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1043 |
qed (auto simp: False) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1044 |
qed (simp add: False) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1045 |
ultimately show "(f * g) $$ n = (\<Sum>i=0..n - dfg. f $$ (df + i) * g $$ (n - df - i))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1046 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1047 |
qed (simp add: fls_times_nth_eq0 assms dfg_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1048 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1049 |
have |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1050 |
"(\<Sum>i=dfg..n. f $$ (i - dg) * g $$ (dg + n - i)) = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1051 |
(\<Sum>i=0..n - dfg. f $$ (df + i) * g $$ (n - df - i))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1052 |
proof (intro sum.reindex_cong) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1053 |
define T where "T \<equiv> \<lambda>i. i + dfg" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1054 |
show "inj_on T {0..n - dfg}" by standard (simp add: T_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1055 |
qed (simp_all add: dfg_def algebra_simps) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1056 |
with 4 show 1: "(f * g) $$ n = (\<Sum>i=dfg..n. f $$ (i - dg) * g $$ (dg + n - i))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1057 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1058 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1059 |
have |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1060 |
"(\<Sum>i=dfg..n. f $$ (i - dg) * g $$ (dg + n - i)) = (\<Sum>i=df..n - dg. f $$ i * g $$ (n - i))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1061 |
proof (intro sum.reindex_cong) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1062 |
define T where "T \<equiv> \<lambda>i. i + dg" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1063 |
show "inj_on T {df..n - dg}" by standard (simp add: T_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1064 |
qed (auto simp: dfg_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1065 |
with 1 show "(f * g) $$ n = (\<Sum>i=df..n - dg. f $$ i * g $$ (n - i))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1066 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1067 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1068 |
have |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1069 |
"(\<Sum>i=dfg..n. f $$ (i - dg) * g $$ (dg + n - i)) = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1070 |
(\<Sum>i=dg..n - df. f $$ (df + i - dg) * g $$ (dg + n - df - i))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1071 |
proof (intro sum.reindex_cong) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1072 |
define T where "T \<equiv> \<lambda>i. i + df" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1073 |
show "inj_on T {dg..n - df}" by standard (simp add: T_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1074 |
qed (simp_all add: dfg_def algebra_simps) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1075 |
with 1 show "(f * g) $$ n = (\<Sum>i=dg..n - df. f $$ (df + i - dg) * g $$ (dg + n - df - i))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1076 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1077 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1078 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1079 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1080 |
lemma fls_times_base [simp]: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1081 |
"(f * g) $$ (fls_subdegree f + fls_subdegree g) = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1082 |
(f $$ fls_subdegree f) * (g $$ fls_subdegree g)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1083 |
by (simp add: fls_times_nth(1)) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1084 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1085 |
instance fls :: ("{comm_monoid_add, mult_zero}") mult_zero |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1086 |
proof |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1087 |
fix a :: "'a fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1088 |
have |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1089 |
"(0::'a fls) * a = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1090 |
fls_shift (fls_subdegree a) (fps_to_fls ( (0::'a fps)*(fls_base_factor_to_fps a) ))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1091 |
by (simp add: fls_times_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1092 |
moreover have |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1093 |
"a * (0::'a fls) = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1094 |
fls_shift (fls_subdegree a) (fps_to_fls ( (fls_base_factor_to_fps a)*(0::'a fps) ))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1095 |
by (simp add: fls_times_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1096 |
ultimately show "0 * a = (0::'a fls)" "a * 0 = (0::'a fls)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1097 |
by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1098 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1099 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1100 |
lemma fls_mult_one: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1101 |
fixes f :: "'a::{comm_monoid_add, mult_zero, monoid_mult} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1102 |
shows "1 * f = f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1103 |
and "f * 1 = f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1104 |
using fls_conv_base_factor_to_fps_shift_subdegree[of f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1105 |
by (simp_all add: fls_times_def fps_one_mult) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1106 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1107 |
lemma fls_mult_const_nth [simp]: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1108 |
fixes f :: "'a::{comm_monoid_add, mult_zero} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1109 |
shows "(fls_const x * f) $$ n = x * f$$n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1110 |
and "(f * fls_const x ) $$ n = f$$n * x" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1111 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1112 |
show "(fls_const x * f) $$ n = x * f$$n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1113 |
proof (cases "n<fls_subdegree f") |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1114 |
case False |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1115 |
hence "{fls_subdegree f..n} = insert (fls_subdegree f) {fls_subdegree f+1..n}" by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1116 |
thus ?thesis by (simp add: fls_times_nth(1)) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1117 |
qed (simp add: fls_times_nth_eq0) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1118 |
show "(f * fls_const x ) $$ n = f$$n * x" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1119 |
proof (cases "n<fls_subdegree f") |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1120 |
case False |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1121 |
hence "{fls_subdegree f..n} = insert n {fls_subdegree f..n-1}" by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1122 |
thus ?thesis by (simp add: fls_times_nth(1)) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1123 |
qed (simp add: fls_times_nth_eq0) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1124 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1125 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1126 |
lemma fls_const_mult_const[simp]: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1127 |
fixes x y :: "'a::{comm_monoid_add, mult_zero}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1128 |
shows "fls_const x * fls_const y = fls_const (x*y)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1129 |
by (intro fls_eqI) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1130 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1131 |
lemma fls_mult_subdegree_ge: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1132 |
fixes f g :: "'a::{comm_monoid_add,mult_zero} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1133 |
assumes "f*g \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1134 |
shows "fls_subdegree (f*g) \<ge> fls_subdegree f + fls_subdegree g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1135 |
by (auto intro: fls_subdegree_geI simp: assms fls_times_nth_eq0) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1136 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1137 |
lemma fls_mult_subdegree_ge_0: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1138 |
fixes f g :: "'a::{comm_monoid_add,mult_zero} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1139 |
assumes "fls_subdegree f \<ge> 0" "fls_subdegree g \<ge> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1140 |
shows "fls_subdegree (f*g) \<ge> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1141 |
using assms fls_mult_subdegree_ge[of f g] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1142 |
by fastforce |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1143 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1144 |
lemma fls_mult_nonzero_base_subdegree_eq: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1145 |
fixes f g :: "'a::{comm_monoid_add,mult_zero} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1146 |
assumes "f $$ (fls_subdegree f) * g $$ (fls_subdegree g) \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1147 |
shows "fls_subdegree (f*g) = fls_subdegree f + fls_subdegree g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1148 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1149 |
from assms have "fls_subdegree (f*g) \<ge> fls_subdegree f + fls_subdegree g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1150 |
using fls_nonzeroI[of "f*g" "fls_subdegree f + fls_subdegree g"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1151 |
fls_mult_subdegree_ge[of f g] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1152 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1153 |
moreover from assms have "fls_subdegree (f*g) \<le> fls_subdegree f + fls_subdegree g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1154 |
by (intro fls_subdegree_leI) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1155 |
ultimately show ?thesis by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1156 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1157 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1158 |
lemma fls_subdegree_mult [simp]: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1159 |
fixes f g :: "'a::semiring_no_zero_divisors fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1160 |
assumes "f \<noteq> 0" "g \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1161 |
shows "fls_subdegree (f * g) = fls_subdegree f + fls_subdegree g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1162 |
using assms |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1163 |
by (auto intro: fls_subdegree_eqI simp: fls_times_nth_eq0) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1164 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1165 |
lemma fls_shifted_times_simps: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1166 |
fixes f g :: "'a::{comm_monoid_add, mult_zero} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1167 |
shows "f * (fls_shift n g) = fls_shift n (f*g)" "(fls_shift n f) * g = fls_shift n (f*g)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1168 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1169 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1170 |
show "f * (fls_shift n g) = fls_shift n (f*g)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1171 |
proof (cases "g=0") |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1172 |
case False |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1173 |
hence |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1174 |
"f * (fls_shift n g) = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1175 |
fls_shift (- (fls_subdegree f + (fls_subdegree g - n))) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1176 |
(fps_to_fls (fls_base_factor_to_fps f * fls_base_factor_to_fps g))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1177 |
unfolding fls_times_def by (simp add: fls_base_factor_to_fps_shift) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1178 |
thus "f * (fls_shift n g) = fls_shift n (f*g)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1179 |
by (simp add: algebra_simps fls_times_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1180 |
qed auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1181 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1182 |
show "(fls_shift n f)*g = fls_shift n (f*g)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1183 |
proof (cases "f=0") |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1184 |
case False |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1185 |
hence |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1186 |
"(fls_shift n f)*g = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1187 |
fls_shift (- ((fls_subdegree f - n) + fls_subdegree g)) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1188 |
(fps_to_fls (fls_base_factor_to_fps f * fls_base_factor_to_fps g))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1189 |
unfolding fls_times_def by (simp add: fls_base_factor_to_fps_shift) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1190 |
thus "(fls_shift n f) * g = fls_shift n (f*g)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1191 |
by (simp add: algebra_simps fls_times_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1192 |
qed auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1193 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1194 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1195 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1196 |
lemma fls_shifted_times_transfer: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1197 |
fixes f g :: "'a::{comm_monoid_add, mult_zero} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1198 |
shows "fls_shift n f * g = f * fls_shift n g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1199 |
using fls_shifted_times_simps(1)[of f n g] fls_shifted_times_simps(2)[of n f g] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1200 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1201 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1202 |
lemma fls_times_both_shifted_simp: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1203 |
fixes f g :: "'a::{comm_monoid_add, mult_zero} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1204 |
shows "(fls_shift m f) * (fls_shift n g) = fls_shift (m+n) (f*g)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1205 |
by (simp add: fls_shifted_times_simps) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1206 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1207 |
lemma fls_base_factor_mult_base_factor: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1208 |
fixes f g :: "'a::{comm_monoid_add, mult_zero} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1209 |
shows "fls_base_factor (f * fls_base_factor g) = fls_base_factor (f * g)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1210 |
and "fls_base_factor (fls_base_factor f * g) = fls_base_factor (f * g)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1211 |
using fls_base_factor_shift[of "fls_subdegree g" "f*g"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1212 |
fls_base_factor_shift[of "fls_subdegree f" "f*g"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1213 |
by (simp_all add: fls_shifted_times_simps) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1214 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1215 |
lemma fls_base_factor_mult_both_base_factor: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1216 |
fixes f g :: "'a::{comm_monoid_add,mult_zero} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1217 |
shows "fls_base_factor (fls_base_factor f * fls_base_factor g) = fls_base_factor (f * g)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1218 |
using fls_base_factor_mult_base_factor(1)[of "fls_base_factor f" g] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1219 |
fls_base_factor_mult_base_factor(2)[of f g] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1220 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1221 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1222 |
lemma fls_base_factor_mult: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1223 |
fixes f g :: "'a::semiring_no_zero_divisors fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1224 |
shows "fls_base_factor (f * g) = fls_base_factor f * fls_base_factor g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1225 |
by (cases "f\<noteq>0 \<and> g\<noteq>0") |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1226 |
(auto simp: fls_times_both_shifted_simp) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1227 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1228 |
lemma fls_times_conv_base_factor_times: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1229 |
fixes f g :: "'a::{comm_monoid_add, mult_zero} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1230 |
shows |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1231 |
"f * g = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1232 |
fls_shift (-(fls_subdegree f + fls_subdegree g)) (fls_base_factor f * fls_base_factor g)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1233 |
by (simp add: fls_times_both_shifted_simp) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1234 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1235 |
lemma fls_times_base_factor_conv_shifted_times: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1236 |
\<comment> \<open>Convenience form of lemma @{text "fls_times_both_shifted_simp"}.\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1237 |
fixes f g :: "'a::{comm_monoid_add, mult_zero} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1238 |
shows |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1239 |
"fls_base_factor f * fls_base_factor g = fls_shift (fls_subdegree f + fls_subdegree g) (f * g)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1240 |
by (simp add: fls_times_both_shifted_simp) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1241 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1242 |
lemma fls_times_conv_regpart: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1243 |
fixes f g :: "'a::{comm_monoid_add,mult_zero} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1244 |
assumes "fls_subdegree f \<ge> 0" "fls_subdegree g \<ge> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1245 |
shows "fls_regpart (f * g) = fls_regpart f * fls_regpart g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1246 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1247 |
from assms have 1: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1248 |
"f * g = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1249 |
fls_shift (- (fls_subdegree f + fls_subdegree g)) ( |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1250 |
fps_to_fls ( |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1251 |
fps_shift (nat (fls_subdegree f) + nat (fls_subdegree g)) ( |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1252 |
fls_regpart f * fls_regpart g |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1253 |
) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1254 |
) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1255 |
)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1256 |
by (simp add: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1257 |
fls_times_def fls_base_factor_to_fps_conv_fps_shift[symmetric] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1258 |
fls_regpart_subdegree_conv fps_shift_mult_both[symmetric] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1259 |
) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1260 |
show ?thesis |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1261 |
proof (cases "fls_regpart f * fls_regpart g = 0") |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1262 |
case False |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1263 |
with assms have |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1264 |
"subdegree (fls_regpart f * fls_regpart g) \<ge> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1265 |
nat (fls_subdegree f) + nat (fls_subdegree g)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1266 |
by (simp add: fps_mult_subdegree_ge fls_regpart_subdegree_conv[symmetric]) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1267 |
with 1 assms show ?thesis by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1268 |
qed (simp add: 1) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1269 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1270 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1271 |
lemma fls_base_factor_to_fps_mult_conv_unit_factor: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1272 |
fixes f g :: "'a::{comm_monoid_add,mult_zero} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1273 |
shows |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1274 |
"fls_base_factor_to_fps (f * g) = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1275 |
unit_factor (fls_base_factor_to_fps f * fls_base_factor_to_fps g)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1276 |
using fls_base_factor_mult_both_base_factor[of f g] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1277 |
fps_unit_factor_fls_regpart[of "fls_base_factor f * fls_base_factor g"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1278 |
fls_base_factor_subdegree[of f] fls_base_factor_subdegree[of g] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1279 |
fls_mult_subdegree_ge_0[of "fls_base_factor f" "fls_base_factor g"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1280 |
fls_times_conv_regpart[of "fls_base_factor f" "fls_base_factor g"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1281 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1282 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1283 |
lemma fls_base_factor_to_fps_mult': |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1284 |
fixes f g :: "'a::{comm_monoid_add,mult_zero} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1285 |
assumes "(f $$ fls_subdegree f) * (g $$ fls_subdegree g) \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1286 |
shows "fls_base_factor_to_fps (f * g) = fls_base_factor_to_fps f * fls_base_factor_to_fps g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1287 |
using assms fls_mult_nonzero_base_subdegree_eq[of f g] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1288 |
fls_times_base_factor_conv_shifted_times[of f g] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1289 |
fls_times_conv_regpart[of "fls_base_factor f" "fls_base_factor g"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1290 |
fls_base_factor_subdegree[of f] fls_base_factor_subdegree[of g] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1291 |
by fastforce |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1292 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1293 |
lemma fls_base_factor_to_fps_mult: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1294 |
fixes f g :: "'a::semiring_no_zero_divisors fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1295 |
shows "fls_base_factor_to_fps (f * g) = fls_base_factor_to_fps f * fls_base_factor_to_fps g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1296 |
using fls_base_factor_to_fps_mult'[of f g] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1297 |
by (cases "f=0 \<or> g=0") auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1298 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1299 |
lemma fls_times_conv_fps_times: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1300 |
fixes f g :: "'a::{comm_monoid_add,mult_zero} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1301 |
assumes "fls_subdegree f \<ge> 0" "fls_subdegree g \<ge> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1302 |
shows "f * g = fps_to_fls (fls_regpart f * fls_regpart g)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1303 |
using assms fls_mult_subdegree_ge[of f g] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1304 |
by (cases "f * g = 0") (simp_all add: fls_times_conv_regpart[symmetric]) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1305 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1306 |
lemma fps_times_conv_fls_times: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1307 |
fixes f g :: "'a::{comm_monoid_add,mult_zero} fps" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1308 |
shows "f * g = fls_regpart (fps_to_fls f * fps_to_fls g)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1309 |
using fls_subdegree_fls_to_fps_gt0 fls_times_conv_regpart[symmetric] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1310 |
by fastforce |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1311 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1312 |
lemma fls_times_fps_to_fls: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1313 |
fixes f g :: "'a::{comm_monoid_add,mult_zero} fps" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1314 |
shows "fps_to_fls (f * g) = fps_to_fls f * fps_to_fls g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1315 |
proof (intro fls_eq_conv_fps_eqI, rule fls_subdegree_fls_to_fps_gt0) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1316 |
show "fls_subdegree (fps_to_fls f * fps_to_fls g) \<ge> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1317 |
proof (cases "fps_to_fls f * fps_to_fls g = 0") |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1318 |
case False thus ?thesis |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1319 |
using fls_mult_subdegree_ge fls_subdegree_fls_to_fps_gt0[of f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1320 |
fls_subdegree_fls_to_fps_gt0[of g] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1321 |
by fastforce |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1322 |
qed simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1323 |
qed (simp add: fps_times_conv_fls_times) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1324 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1325 |
lemma fls_X_times_conv_shift: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1326 |
fixes f :: "'a::{comm_monoid_add,mult_zero,monoid_mult} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1327 |
shows "fls_X * f = fls_shift (-1) f" "f * fls_X = fls_shift (-1) f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1328 |
by (simp_all add: fls_X_conv_shift_1 fls_mult_one fls_shifted_times_simps) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1329 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1330 |
lemmas fls_X_times_comm = trans_sym[OF fls_X_times_conv_shift] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1331 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1332 |
lemma fls_subdegree_mult_fls_X: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1333 |
fixes f :: "'a::{comm_monoid_add,mult_zero,monoid_mult} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1334 |
assumes "f \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1335 |
shows "fls_subdegree (fls_X * f) = fls_subdegree f + 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1336 |
and "fls_subdegree (f * fls_X) = fls_subdegree f + 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1337 |
by (auto simp: fls_X_times_conv_shift assms) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1338 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1339 |
lemma fls_mult_fls_X_nonzero: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1340 |
fixes f :: "'a::{comm_monoid_add,mult_zero,monoid_mult} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1341 |
assumes "f \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1342 |
shows "fls_X * f \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1343 |
and "f * fls_X \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1344 |
by (auto simp: fls_X_times_conv_shift fls_shift_eq0_iff assms) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1345 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1346 |
lemma fls_base_factor_mult_fls_X: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1347 |
fixes f :: "'a::{comm_monoid_add,monoid_mult,mult_zero} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1348 |
shows "fls_base_factor (fls_X * f) = fls_base_factor f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1349 |
and "fls_base_factor (f * fls_X) = fls_base_factor f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1350 |
using fls_base_factor_shift[of "-1" f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1351 |
by (auto simp: fls_X_times_conv_shift) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1352 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1353 |
lemma fls_X_inv_times_conv_shift: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1354 |
fixes f :: "'a::{comm_monoid_add,mult_zero,monoid_mult} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1355 |
shows "fls_X_inv * f = fls_shift 1 f" "f * fls_X_inv = fls_shift 1 f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1356 |
by (simp_all add: fls_X_inv_conv_shift_1 fls_mult_one fls_shifted_times_simps) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1357 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1358 |
lemmas fls_X_inv_times_comm = trans_sym[OF fls_X_inv_times_conv_shift] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1359 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1360 |
lemma fls_subdegree_mult_fls_X_inv: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1361 |
fixes f :: "'a::{comm_monoid_add,mult_zero,monoid_mult} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1362 |
assumes "f \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1363 |
shows "fls_subdegree (fls_X_inv * f) = fls_subdegree f - 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1364 |
and "fls_subdegree (f * fls_X_inv) = fls_subdegree f - 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1365 |
by (auto simp: fls_X_inv_times_conv_shift assms) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1366 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1367 |
lemma fls_mult_fls_X_inv_nonzero: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1368 |
fixes f :: "'a::{comm_monoid_add,mult_zero,monoid_mult} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1369 |
assumes "f \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1370 |
shows "fls_X_inv * f \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1371 |
and "f * fls_X_inv \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1372 |
by (auto simp: fls_X_inv_times_conv_shift fls_shift_eq0_iff assms) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1373 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1374 |
lemma fls_base_factor_mult_fls_X_inv: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1375 |
fixes f :: "'a::{comm_monoid_add,monoid_mult,mult_zero} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1376 |
shows "fls_base_factor (fls_X_inv * f) = fls_base_factor f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1377 |
and "fls_base_factor (f * fls_X_inv) = fls_base_factor f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1378 |
using fls_base_factor_shift[of 1 f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1379 |
by (auto simp: fls_X_inv_times_conv_shift) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1380 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1381 |
lemma fls_mult_assoc_subdegree_ge_0: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1382 |
fixes f g h :: "'a::semiring_0 fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1383 |
assumes "fls_subdegree f \<ge> 0" "fls_subdegree g \<ge> 0" "fls_subdegree h \<ge> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1384 |
shows "f * g * h = f * (g * h)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1385 |
using assms |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1386 |
by (simp add: fls_times_conv_fps_times fls_subdegree_fls_to_fps_gt0 mult.assoc) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1387 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1388 |
lemma fls_mult_assoc_base_factor: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1389 |
fixes a b c :: "'a::semiring_0 fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1390 |
shows |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1391 |
"fls_base_factor a * fls_base_factor b * fls_base_factor c = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1392 |
fls_base_factor a * (fls_base_factor b * fls_base_factor c)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1393 |
by (simp add: fls_mult_assoc_subdegree_ge_0 del: fls_base_factor_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1394 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1395 |
lemma fls_mult_distrib_subdegree_ge_0: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1396 |
fixes f g h :: "'a::semiring_0 fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1397 |
assumes "fls_subdegree f \<ge> 0" "fls_subdegree g \<ge> 0" "fls_subdegree h \<ge> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1398 |
shows "(f + g) * h = f * h + g * h" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1399 |
and "h * (f + g) = h * f + h * g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1400 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1401 |
have "fls_subdegree (f+g) \<ge> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1402 |
proof (cases "f+g = 0") |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1403 |
case False |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1404 |
with assms(1,2) show ?thesis |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1405 |
using fls_plus_subdegree by fastforce |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1406 |
qed simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1407 |
with assms show "(f + g) * h = f * h + g * h" "h * (f + g) = h * f + h * g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1408 |
using distrib_right[of "fls_regpart f"] distrib_left[of "fls_regpart h"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1409 |
by (simp_all add: fls_times_conv_fps_times) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1410 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1411 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1412 |
lemma fls_mult_distrib_base_factor: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1413 |
fixes a b c :: "'a::semiring_0 fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1414 |
shows |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1415 |
"fls_base_factor a * (fls_base_factor b + fls_base_factor c) = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1416 |
fls_base_factor a * fls_base_factor b + fls_base_factor a * fls_base_factor c" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1417 |
by (simp add: fls_mult_distrib_subdegree_ge_0 del: fls_base_factor_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1418 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1419 |
instance fls :: (semiring_0) semiring_0 |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1420 |
proof |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1421 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1422 |
fix a b c :: "'a fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1423 |
have |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1424 |
"a * b * c = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1425 |
fls_shift (- (fls_subdegree a + fls_subdegree b + fls_subdegree c)) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1426 |
(fls_base_factor a * fls_base_factor b * fls_base_factor c)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1427 |
by (simp add: fls_times_both_shifted_simp) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1428 |
moreover have |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1429 |
"a * (b * c) = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1430 |
fls_shift (- (fls_subdegree a + fls_subdegree b + fls_subdegree c)) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1431 |
(fls_base_factor a * fls_base_factor b * fls_base_factor c)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1432 |
using fls_mult_assoc_base_factor[of a b c] by (simp add: fls_times_both_shifted_simp) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1433 |
ultimately show "a * b * c = a * (b * c)" by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1434 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1435 |
have ab: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1436 |
"fls_subdegree (fls_shift (min (fls_subdegree a) (fls_subdegree b)) a) \<ge> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1437 |
"fls_subdegree (fls_shift (min (fls_subdegree a) (fls_subdegree b)) b) \<ge> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1438 |
by (simp_all add: fls_shift_nonneg_subdegree) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1439 |
have |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1440 |
"(a + b) * c = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1441 |
fls_shift (- (min (fls_subdegree a) (fls_subdegree b) + fls_subdegree c)) ( |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1442 |
( |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1443 |
fls_shift (min (fls_subdegree a) (fls_subdegree b)) a + |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1444 |
fls_shift (min (fls_subdegree a) (fls_subdegree b)) b |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1445 |
) * fls_base_factor c)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1446 |
using fls_times_both_shifted_simp[of |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1447 |
"-min (fls_subdegree a) (fls_subdegree b)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1448 |
"fls_shift (min (fls_subdegree a) (fls_subdegree b)) a + |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1449 |
fls_shift (min (fls_subdegree a) (fls_subdegree b)) b" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1450 |
"-fls_subdegree c" "fls_base_factor c" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1451 |
] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1452 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1453 |
also have |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1454 |
"\<dots> = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1455 |
fls_shift (-(min (fls_subdegree a) (fls_subdegree b) + fls_subdegree c)) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1456 |
(fls_shift (min (fls_subdegree a) (fls_subdegree b)) a * fls_base_factor c) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1457 |
+ |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1458 |
fls_shift (-(min (fls_subdegree a) (fls_subdegree b) + fls_subdegree c)) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1459 |
(fls_shift (min (fls_subdegree a) (fls_subdegree b)) b * fls_base_factor c)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1460 |
using ab |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1461 |
by (simp add: fls_mult_distrib_subdegree_ge_0(1) del: fls_base_factor_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1462 |
finally show "(a + b) * c = a * c + b * c" by (simp add: fls_times_both_shifted_simp) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1463 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1464 |
have bc: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1465 |
"fls_subdegree (fls_shift (min (fls_subdegree b) (fls_subdegree c)) b) \<ge> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1466 |
"fls_subdegree (fls_shift (min (fls_subdegree b) (fls_subdegree c)) c) \<ge> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1467 |
by (simp_all add: fls_shift_nonneg_subdegree) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1468 |
have |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1469 |
"a * (b + c) = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1470 |
fls_shift (- (fls_subdegree a + min (fls_subdegree b) (fls_subdegree c))) ( |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1471 |
fls_base_factor a * ( |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1472 |
fls_shift (min (fls_subdegree b) (fls_subdegree c)) b + |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1473 |
fls_shift (min (fls_subdegree b) (fls_subdegree c)) c |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1474 |
) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1475 |
) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1476 |
" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1477 |
using fls_times_both_shifted_simp[of |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1478 |
"-fls_subdegree a" "fls_base_factor a" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1479 |
"-min (fls_subdegree b) (fls_subdegree c)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1480 |
"fls_shift (min (fls_subdegree b) (fls_subdegree c)) b + |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1481 |
fls_shift (min (fls_subdegree b) (fls_subdegree c)) c" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1482 |
] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1483 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1484 |
also have |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1485 |
"\<dots> = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1486 |
fls_shift (-(fls_subdegree a + min (fls_subdegree b) (fls_subdegree c))) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1487 |
(fls_base_factor a * fls_shift (min (fls_subdegree b) (fls_subdegree c)) b) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1488 |
+ |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1489 |
fls_shift (-(fls_subdegree a + min (fls_subdegree b) (fls_subdegree c))) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1490 |
(fls_base_factor a * fls_shift (min (fls_subdegree b) (fls_subdegree c)) c) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1491 |
" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1492 |
using bc |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1493 |
by (simp add: fls_mult_distrib_subdegree_ge_0(2) del: fls_base_factor_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1494 |
finally show "a * (b + c) = a * b + a * c" by (simp add: fls_times_both_shifted_simp) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1495 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1496 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1497 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1498 |
lemma fls_mult_commute_subdegree_ge_0: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1499 |
fixes f g :: "'a::comm_semiring_0 fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1500 |
assumes "fls_subdegree f \<ge> 0" "fls_subdegree g \<ge> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1501 |
shows "f * g = g * f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1502 |
using assms |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1503 |
by (simp add: fls_times_conv_fps_times mult.commute) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1504 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1505 |
lemma fls_mult_commute_base_factor: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1506 |
fixes a b c :: "'a::comm_semiring_0 fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1507 |
shows "fls_base_factor a * fls_base_factor b = fls_base_factor b * fls_base_factor a" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1508 |
by (simp add: fls_mult_commute_subdegree_ge_0 del: fls_base_factor_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1509 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1510 |
instance fls :: (comm_semiring_0) comm_semiring_0 |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1511 |
proof |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1512 |
fix a b c :: "'a fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1513 |
show "a * b = b * a" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1514 |
using fls_times_conv_base_factor_times[of a b] fls_times_conv_base_factor_times[of b a] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1515 |
fls_mult_commute_base_factor[of a b] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1516 |
by (simp add: add.commute) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1517 |
qed (simp add: distrib_right) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1518 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1519 |
instance fls :: (semiring_1) semiring_1 |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1520 |
by (standard, simp_all add: fls_mult_one) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1521 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1522 |
lemma fls_of_nat: "(of_nat n :: 'a::semiring_1 fls) = fls_const (of_nat n)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1523 |
by (induct n) (auto intro: fls_eqI) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1524 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1525 |
lemma fls_of_nat_nth: "of_nat n $$ k = (if k=0 then of_nat n else 0)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1526 |
by (simp add: fls_of_nat) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1527 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1528 |
lemma fls_mult_of_nat_nth [simp]: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1529 |
shows "(of_nat k * f) $$ n = of_nat k * f$$n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1530 |
and "(f * of_nat k ) $$ n = f$$n * of_nat k" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1531 |
by (simp_all add: fls_of_nat) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1532 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1533 |
lemma fls_subdegree_of_nat [simp]: "fls_subdegree (of_nat n) = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1534 |
by (simp add: fls_of_nat) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1535 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1536 |
lemma fls_shift_of_nat_nth: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1537 |
"fls_shift k (of_nat a) $$ n = (if n=-k then of_nat a else 0)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1538 |
by (simp add: fls_of_nat fls_shift_const_nth) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1539 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1540 |
lemma fls_base_factor_of_nat [simp]: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1541 |
"fls_base_factor (of_nat n :: 'a::semiring_1 fls) = (of_nat n :: 'a fls)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1542 |
by (simp add: fls_of_nat) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1543 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1544 |
lemma fls_regpart_of_nat [simp]: "fls_regpart (of_nat n) = (of_nat n :: 'a::semiring_1 fps)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1545 |
by (simp add: fls_of_nat fps_of_nat) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1546 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1547 |
lemma fls_prpart_of_nat [simp]: "fls_prpart (of_nat n) = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1548 |
by (simp add: fls_prpart_eq0_iff) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1549 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1550 |
lemma fls_base_factor_to_fps_of_nat: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1551 |
"fls_base_factor_to_fps (of_nat n) = (of_nat n :: 'a::semiring_1 fps)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1552 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1553 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1554 |
lemma fps_to_fls_of_nat: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1555 |
"fps_to_fls (of_nat n) = (of_nat n :: 'a::semiring_1 fls)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1556 |
proof - |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1557 |
have "fps_to_fls (of_nat n) = fps_to_fls (fps_const (of_nat n))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1558 |
by (simp add: fps_of_nat) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1559 |
thus ?thesis by (simp add: fls_of_nat) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1560 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1561 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1562 |
instance fls :: (comm_semiring_1) comm_semiring_1 |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1563 |
by standard simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1564 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1565 |
instance fls :: (ring) ring .. |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1566 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1567 |
instance fls :: (comm_ring) comm_ring .. |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1568 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1569 |
instance fls :: (ring_1) ring_1 .. |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1570 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1571 |
lemma fls_of_int_nonneg: "(of_int (int n) :: 'a::ring_1 fls) = fls_const (of_int (int n))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1572 |
by (induct n) (auto intro: fls_eqI) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1573 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1574 |
lemma fls_of_int: "(of_int i :: 'a::ring_1 fls) = fls_const (of_int i)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1575 |
proof (induct i) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1576 |
case (neg i) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1577 |
have "of_int (int (Suc i)) = fls_const (of_int (int (Suc i)) :: 'a)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1578 |
using fls_of_int_nonneg[of "Suc i"] by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1579 |
hence "- of_int (int (Suc i)) = - fls_const (of_int (int (Suc i)) :: 'a)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1580 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1581 |
thus ?case by (simp add: fls_const_uminus[symmetric]) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1582 |
qed (rule fls_of_int_nonneg) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1583 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1584 |
lemma fls_of_int_nth: "of_int n $$ k = (if k=0 then of_int n else 0)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1585 |
by (simp add: fls_of_int) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1586 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1587 |
lemma fls_mult_of_int_nth [simp]: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1588 |
shows "(of_int k * f) $$ n = of_int k * f$$n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1589 |
and "(f * of_int k ) $$ n = f$$n * of_int k" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1590 |
by (simp_all add: fls_of_int) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1591 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1592 |
lemma fls_subdegree_of_int [simp]: "fls_subdegree (of_int i) = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1593 |
by (simp add: fls_of_int) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1594 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1595 |
lemma fls_shift_of_int_nth: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1596 |
"fls_shift k (of_int i) $$ n = (if n=-k then of_int i else 0)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1597 |
by (simp add: fls_of_int_nth) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1598 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1599 |
lemma fls_base_factor_of_int [simp]: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1600 |
"fls_base_factor (of_int i :: 'a::ring_1 fls) = (of_int i :: 'a fls)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1601 |
by (simp add: fls_of_int) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1602 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1603 |
lemma fls_regpart_of_int [simp]: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1604 |
"fls_regpart (of_int i) = (of_int i :: 'a::ring_1 fps)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1605 |
by (simp add: fls_of_int fps_of_int) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1606 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1607 |
lemma fls_prpart_of_int [simp]: "fls_prpart (of_int n) = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1608 |
by (simp add: fls_prpart_eq0_iff) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1609 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1610 |
lemma fls_base_factor_to_fps_of_int: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1611 |
"fls_base_factor_to_fps (of_int i) = (of_int i :: 'a::ring_1 fps)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1612 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1613 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1614 |
lemma fps_to_fls_of_int: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1615 |
"fps_to_fls (of_int i) = (of_int i :: 'a::ring_1 fls)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1616 |
proof - |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1617 |
have "fps_to_fls (of_int i) = fps_to_fls (fps_const (of_int i))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1618 |
by (simp add: fps_of_int) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1619 |
thus ?thesis by (simp add: fls_of_int) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1620 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1621 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1622 |
instance fls :: (comm_ring_1) comm_ring_1 .. |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1623 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1624 |
instance fls :: (semiring_no_zero_divisors) semiring_no_zero_divisors |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1625 |
proof |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1626 |
fix a b :: "'a fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1627 |
assume "a \<noteq> 0" and "b \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1628 |
hence "(a * b) $$ (fls_subdegree a + fls_subdegree b) \<noteq> 0" by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1629 |
thus "a * b \<noteq> 0" using fls_nonzeroI by fast |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1630 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1631 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1632 |
instance fls :: (semiring_1_no_zero_divisors) semiring_1_no_zero_divisors .. |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1633 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1634 |
instance fls :: (ring_no_zero_divisors) ring_no_zero_divisors .. |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1635 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1636 |
instance fls :: (ring_1_no_zero_divisors) ring_1_no_zero_divisors .. |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1637 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1638 |
instance fls :: (idom) idom .. |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1639 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1640 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1641 |
subsubsection \<open>Powers\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1642 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1643 |
lemma fls_pow_subdegree_ge: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1644 |
"f^n \<noteq> 0 \<Longrightarrow> fls_subdegree (f^n) \<ge> n * fls_subdegree f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1645 |
proof (induct n) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1646 |
case (Suc n) thus ?case |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1647 |
using fls_mult_subdegree_ge[of f "f^n"] by (fastforce simp: algebra_simps) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1648 |
qed simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1649 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1650 |
lemma fls_pow_nth_below_subdegree: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1651 |
"k < n * fls_subdegree f \<Longrightarrow> (f^n) $$ k = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1652 |
using fls_pow_subdegree_ge[of f n] by (cases "f^n = 0") auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1653 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1654 |
lemma fls_pow_base [simp]: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1655 |
"(f ^ n) $$ (n * fls_subdegree f) = (f $$ fls_subdegree f) ^ n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1656 |
proof (induct n) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1657 |
case (Suc n) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1658 |
show ?case |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1659 |
proof (cases "Suc n * fls_subdegree f < fls_subdegree f + fls_subdegree (f^n)") |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1660 |
case True with Suc show ?thesis |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1661 |
by (simp_all add: fls_times_nth_eq0 distrib_right) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1662 |
next |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1663 |
case False |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1664 |
from False have |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1665 |
"{0..int n * fls_subdegree f - fls_subdegree (f ^ n)} = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1666 |
insert 0 {1..int n * fls_subdegree f - fls_subdegree (f ^ n)}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1667 |
by (auto simp: algebra_simps) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1668 |
with False Suc show ?thesis |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1669 |
by (simp add: algebra_simps fls_times_nth(4) fls_pow_nth_below_subdegree) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1670 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1671 |
qed simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1672 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1673 |
lemma fls_pow_subdegree_eqI: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1674 |
"(f $$ fls_subdegree f) ^ n \<noteq> 0 \<Longrightarrow> fls_subdegree (f^n) = n * fls_subdegree f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1675 |
using fls_pow_nth_below_subdegree by (fastforce intro: fls_subdegree_eqI) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1676 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1677 |
lemma fls_unit_base_subdegree_power: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1678 |
"x * f $$ fls_subdegree f = 1 \<Longrightarrow> fls_subdegree (f ^ n) = n * fls_subdegree f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1679 |
"f $$ fls_subdegree f * y = 1 \<Longrightarrow> fls_subdegree (f ^ n) = n * fls_subdegree f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1680 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1681 |
show "x * f $$ fls_subdegree f = 1 \<Longrightarrow> fls_subdegree (f ^ n) = n * fls_subdegree f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1682 |
using left_right_inverse_power[of x "f $$ fls_subdegree f" n] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1683 |
by (auto intro: fls_pow_subdegree_eqI) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1684 |
show "f $$ fls_subdegree f * y = 1 \<Longrightarrow> fls_subdegree (f ^ n) = n * fls_subdegree f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1685 |
using left_right_inverse_power[of "f $$ fls_subdegree f" y n] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1686 |
by (auto intro: fls_pow_subdegree_eqI) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1687 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1688 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1689 |
lemma fls_base_dvd1_subdegree_power: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1690 |
"f $$ fls_subdegree f dvd 1 \<Longrightarrow> fls_subdegree (f ^ n) = n * fls_subdegree f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1691 |
using fls_unit_base_subdegree_power unfolding dvd_def by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1692 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1693 |
lemma fls_pow_subdegree_ge0: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1694 |
assumes "fls_subdegree f \<ge> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1695 |
shows "fls_subdegree (f^n) \<ge> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1696 |
proof (cases "f^n = 0") |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1697 |
case False |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1698 |
moreover from assms have "int n * fls_subdegree f \<ge> 0" by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1699 |
ultimately show ?thesis using fls_pow_subdegree_ge by fastforce |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1700 |
qed simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1701 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1702 |
lemma fls_subdegree_pow: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1703 |
fixes f :: "'a::semiring_1_no_zero_divisors fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1704 |
shows "fls_subdegree (f ^ n) = n * fls_subdegree f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1705 |
proof (cases "f=0") |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1706 |
case False thus ?thesis by (induct n) (simp_all add: algebra_simps) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1707 |
qed (cases "n=0", auto simp: zero_power) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1708 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1709 |
lemma fls_shifted_pow: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1710 |
"(fls_shift m f) ^ n = fls_shift (n*m) (f ^ n)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1711 |
by (induct n) (simp_all add: fls_times_both_shifted_simp algebra_simps) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1712 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1713 |
lemma fls_pow_conv_fps_pow: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1714 |
assumes "fls_subdegree f \<ge> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1715 |
shows "f ^ n = fps_to_fls ( (fls_regpart f) ^ n )" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1716 |
proof (induct n) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1717 |
case (Suc n) with assms show ?case |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1718 |
using fls_pow_subdegree_ge0[of f n] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1719 |
by (simp add: fls_times_conv_fps_times) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1720 |
qed simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1721 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1722 |
lemma fls_pow_conv_regpart: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1723 |
"fls_subdegree f \<ge> 0 \<Longrightarrow> fls_regpart (f ^ n) = (fls_regpart f) ^ n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1724 |
using fls_pow_subdegree_ge0[of f n] fls_pow_conv_fps_pow[of f n] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1725 |
by (intro fps_to_fls_eq_imp_fps_eq) simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1726 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1727 |
text \<open>These two lemmas show that shifting 1 is equivalent to powers of the implied variable.\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1728 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1729 |
lemma fls_X_power_conv_shift_1: "fls_X ^ n = fls_shift (-n) 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1730 |
by (simp add: fls_X_conv_shift_1 fls_shifted_pow) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1731 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1732 |
lemma fls_X_inv_power_conv_shift_1: "fls_X_inv ^ n = fls_shift n 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1733 |
by (simp add: fls_X_inv_conv_shift_1 fls_shifted_pow) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1734 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1735 |
abbreviation "fls_X_intpow \<equiv> (\<lambda>i. fls_shift (-i) 1)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1736 |
\<comment> \<open> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1737 |
Unifies @{term fls_X} and @{term fls_X_inv} so that @{term "fls_X_intpow"} returns the equivalent |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1738 |
of the implied variable raised to the supplied integer argument of @{term "fls_X_intpow"}, whether |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1739 |
positive or negative. |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1740 |
\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1741 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1742 |
lemma fls_X_intpow_nonzero[simp]: "(fls_X_intpow i :: 'a::zero_neq_one fls) \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1743 |
by (simp add: fls_shift_eq0_iff) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1744 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1745 |
lemma fls_X_intpow_power: "(fls_X_intpow i) ^ n = fls_X_intpow (n * i)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1746 |
by (simp add: fls_shifted_pow) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1747 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1748 |
lemma fls_X_power_nth [simp]: "fls_X ^ n $$ k = (if k=n then 1 else 0)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1749 |
by (simp add: fls_X_power_conv_shift_1) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1750 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1751 |
lemma fls_X_inv_power_nth [simp]: "fls_X_inv ^ n $$ k = (if k=-n then 1 else 0)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1752 |
by (simp add: fls_X_inv_power_conv_shift_1) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1753 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1754 |
lemma fls_X_pow_nonzero[simp]: "(fls_X ^ n :: 'a :: semiring_1 fls) \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1755 |
proof |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1756 |
assume "(fls_X ^ n :: 'a fls) = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1757 |
hence "(fls_X ^ n :: 'a fls) $$ n = 0" by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1758 |
thus False by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1759 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1760 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1761 |
lemma fls_X_inv_pow_nonzero[simp]: "(fls_X_inv ^ n :: 'a :: semiring_1 fls) \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1762 |
proof |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1763 |
assume "(fls_X_inv ^ n :: 'a fls) = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1764 |
hence "(fls_X_inv ^ n :: 'a fls) $$ -n = 0" by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1765 |
thus False by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1766 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1767 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1768 |
lemma fls_subdegree_fls_X_pow [simp]: "fls_subdegree (fls_X ^ n) = n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1769 |
by (intro fls_subdegree_eqI) (simp_all add: fls_X_power_conv_shift_1) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1770 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1771 |
lemma fls_subdegree_fls_X_inv_pow [simp]: "fls_subdegree (fls_X_inv ^ n) = -n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1772 |
by (intro fls_subdegree_eqI) (simp_all add: fls_X_inv_power_conv_shift_1) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1773 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1774 |
lemma fls_subdegree_fls_X_intpow [simp]: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1775 |
"fls_subdegree ((fls_X_intpow i) :: 'a::zero_neq_one fls) = i" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1776 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1777 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1778 |
lemma fls_X_pow_conv_fps_X_pow: "fls_regpart (fls_X ^ n) = fps_X ^ n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1779 |
by (simp add: fls_pow_conv_regpart) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1780 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1781 |
lemma fls_X_inv_pow_regpart: "n > 0 \<Longrightarrow> fls_regpart (fls_X_inv ^ n) = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1782 |
by (auto intro: fps_ext simp: fls_X_inv_power_conv_shift_1) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1783 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1784 |
lemma fls_X_intpow_regpart: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1785 |
"fls_regpart (fls_X_intpow i) = (if i\<ge>0 then fps_X ^ nat i else 0)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1786 |
using fls_X_pow_conv_fps_X_pow[of "nat i"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1787 |
fls_regpart_shift_conv_fps_shift[of "-i" 1] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1788 |
by (auto simp: fls_X_power_conv_shift_1 fps_shift_one) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1789 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1790 |
lemma fls_X_power_times_conv_shift: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1791 |
"fls_X ^ n * f = fls_shift (-int n) f" "f * fls_X ^ n = fls_shift (-int n) f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1792 |
using fls_times_both_shifted_simp[of "-int n" 1 0 f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1793 |
fls_times_both_shifted_simp[of 0 f "-int n" 1] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1794 |
by (simp_all add: fls_X_power_conv_shift_1) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1795 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1796 |
lemma fls_X_inv_power_times_conv_shift: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1797 |
"fls_X_inv ^ n * f = fls_shift (int n) f" "f * fls_X_inv ^ n = fls_shift (int n) f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1798 |
using fls_times_both_shifted_simp[of "int n" 1 0 f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1799 |
fls_times_both_shifted_simp[of 0 f "int n" 1] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1800 |
by (simp_all add: fls_X_inv_power_conv_shift_1) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1801 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1802 |
lemma fls_X_intpow_times_conv_shift: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1803 |
fixes f :: "'a::semiring_1 fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1804 |
shows "fls_X_intpow i * f = fls_shift (-i) f" "f * fls_X_intpow i = fls_shift (-i) f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1805 |
by (simp_all add: fls_shifted_times_simps) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1806 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1807 |
lemmas fls_X_power_times_comm = trans_sym[OF fls_X_power_times_conv_shift] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1808 |
lemmas fls_X_inv_power_times_comm = trans_sym[OF fls_X_inv_power_times_conv_shift] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1809 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1810 |
lemma fls_X_intpow_times_comm: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1811 |
fixes f :: "'a::semiring_1 fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1812 |
shows "fls_X_intpow i * f = f * fls_X_intpow i" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1813 |
by (simp add: fls_X_intpow_times_conv_shift) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1814 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1815 |
lemma fls_X_intpow_times_fls_X_intpow: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1816 |
"(fls_X_intpow i :: 'a::semiring_1 fls) * fls_X_intpow j = fls_X_intpow (i+j)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1817 |
by (simp add: fls_times_both_shifted_simp) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1818 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1819 |
lemma fls_X_intpow_diff_conv_times: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1820 |
"fls_X_intpow (i-j) = (fls_X_intpow i :: 'a::semiring_1 fls) * fls_X_intpow (-j)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1821 |
using fls_X_intpow_times_fls_X_intpow[of i "-j",symmetric] by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1822 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1823 |
lemma fls_mult_fls_X_power_nonzero: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1824 |
assumes "f \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1825 |
shows "fls_X ^ n * f \<noteq> 0" "f * fls_X ^ n \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1826 |
by (auto simp: fls_X_power_times_conv_shift fls_shift_eq0_iff assms) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1827 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1828 |
lemma fls_mult_fls_X_inv_power_nonzero: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1829 |
assumes "f \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1830 |
shows "fls_X_inv ^ n * f \<noteq> 0" "f * fls_X_inv ^ n \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1831 |
by (auto simp: fls_X_inv_power_times_conv_shift fls_shift_eq0_iff assms) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1832 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1833 |
lemma fls_mult_fls_X_intpow_nonzero: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1834 |
fixes f :: "'a::semiring_1 fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1835 |
assumes "f \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1836 |
shows "fls_X_intpow i * f \<noteq> 0" "f * fls_X_intpow i \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1837 |
by (auto simp: fls_X_intpow_times_conv_shift fls_shift_eq0_iff assms) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1838 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1839 |
lemma fls_subdegree_mult_fls_X_power: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1840 |
assumes "f \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1841 |
shows "fls_subdegree (fls_X ^ n * f) = fls_subdegree f + n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1842 |
and "fls_subdegree (f * fls_X ^ n) = fls_subdegree f + n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1843 |
by (auto simp: fls_X_power_times_conv_shift assms) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1844 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1845 |
lemma fls_subdegree_mult_fls_X_inv_power: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1846 |
assumes "f \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1847 |
shows "fls_subdegree (fls_X_inv ^ n * f) = fls_subdegree f - n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1848 |
and "fls_subdegree (f * fls_X_inv ^ n) = fls_subdegree f - n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1849 |
by (auto simp: fls_X_inv_power_times_conv_shift assms) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1850 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1851 |
lemma fls_subdegree_mult_fls_X_intpow: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1852 |
fixes f :: "'a::semiring_1 fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1853 |
assumes "f \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1854 |
shows "fls_subdegree (fls_X_intpow i * f) = fls_subdegree f + i" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1855 |
and "fls_subdegree (f * fls_X_intpow i) = fls_subdegree f + i" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1856 |
by (auto simp: fls_X_intpow_times_conv_shift assms) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1857 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1858 |
lemma fls_X_shift: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1859 |
"fls_shift (-int n) fls_X = fls_X ^ Suc n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1860 |
"fls_shift (int (Suc n)) fls_X = fls_X_inv ^ n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1861 |
using fls_X_power_conv_shift_1[of "Suc n", symmetric] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1862 |
by (simp_all add: fls_X_conv_shift_1 fls_X_inv_power_conv_shift_1) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1863 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1864 |
lemma fls_X_inv_shift: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1865 |
"fls_shift (int n) fls_X_inv = fls_X_inv ^ Suc n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1866 |
"fls_shift (- int (Suc n)) fls_X_inv = fls_X ^ n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1867 |
using fls_X_inv_power_conv_shift_1[of "Suc n", symmetric] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1868 |
by (simp_all add: fls_X_inv_conv_shift_1 fls_X_power_conv_shift_1) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1869 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1870 |
lemma fls_X_power_base_factor: "fls_base_factor (fls_X ^ n) = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1871 |
by (simp add: fls_X_power_conv_shift_1) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1872 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1873 |
lemma fls_X_inv_power_base_factor: "fls_base_factor (fls_X_inv ^ n) = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1874 |
by (simp add: fls_X_inv_power_conv_shift_1) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1875 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1876 |
lemma fls_X_intpow_base_factor: "fls_base_factor (fls_X_intpow i) = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1877 |
using fls_base_factor_shift[of "-i" 1] by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1878 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1879 |
lemma fls_base_factor_mult_fls_X_power: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1880 |
shows "fls_base_factor (fls_X ^ n * f) = fls_base_factor f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1881 |
and "fls_base_factor (f * fls_X ^ n) = fls_base_factor f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1882 |
using fls_base_factor_shift[of "-int n" f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1883 |
by (auto simp: fls_X_power_times_conv_shift) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1884 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1885 |
lemma fls_base_factor_mult_fls_X_inv_power: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1886 |
shows "fls_base_factor (fls_X_inv ^ n * f) = fls_base_factor f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1887 |
and "fls_base_factor (f * fls_X_inv ^ n) = fls_base_factor f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1888 |
using fls_base_factor_shift[of "int n" f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1889 |
by (auto simp: fls_X_inv_power_times_conv_shift) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1890 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1891 |
lemma fls_base_factor_mult_fls_X_intpow: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1892 |
fixes f :: "'a::semiring_1 fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1893 |
shows "fls_base_factor (fls_X_intpow i * f) = fls_base_factor f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1894 |
and "fls_base_factor (f * fls_X_intpow i) = fls_base_factor f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1895 |
using fls_base_factor_shift[of "-i" f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1896 |
by (auto simp: fls_X_intpow_times_conv_shift) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1897 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1898 |
lemma fls_X_power_base_factor_to_fps: "fls_base_factor_to_fps (fls_X ^ n) = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1899 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1900 |
define X where "X \<equiv> fls_X :: 'a::semiring_1 fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1901 |
hence "fls_base_factor (X ^ n) = 1" using fls_X_power_base_factor by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1902 |
thus "fls_base_factor_to_fps (X^n) = 1" by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1903 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1904 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1905 |
lemma fls_X_inv_power_base_factor_to_fps: "fls_base_factor_to_fps (fls_X_inv ^ n) = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1906 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1907 |
define iX where "iX \<equiv> fls_X_inv :: 'a::semiring_1 fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1908 |
hence "fls_base_factor (iX ^ n) = 1" using fls_X_inv_power_base_factor by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1909 |
thus "fls_base_factor_to_fps (iX^n) = 1" by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1910 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1911 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1912 |
lemma fls_X_intpow_base_factor_to_fps: "fls_base_factor_to_fps (fls_X_intpow i) = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1913 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1914 |
define f :: "'a fls" where "f \<equiv> fls_X_intpow i" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1915 |
moreover have "fls_base_factor (fls_X_intpow i) = 1" by (rule fls_X_intpow_base_factor) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1916 |
ultimately have "fls_base_factor f = 1" by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1917 |
thus "fls_base_factor_to_fps f = 1" by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1918 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1919 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1920 |
lemma fls_base_factor_X_power_decompose: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1921 |
fixes f :: "'a::semiring_1 fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1922 |
shows "f = fls_base_factor f * fls_X_intpow (fls_subdegree f)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1923 |
and "f = fls_X_intpow (fls_subdegree f) * fls_base_factor f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1924 |
by (simp_all add: fls_times_both_shifted_simp) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1925 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1926 |
lemma fls_normalized_product_of_inverses: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1927 |
assumes "f * g = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1928 |
shows "fls_base_factor f * fls_base_factor g = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1929 |
fls_X ^ (nat (-(fls_subdegree f+fls_subdegree g)))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1930 |
and "fls_base_factor f * fls_base_factor g = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1931 |
fls_X_intpow (-(fls_subdegree f+fls_subdegree g))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1932 |
using fls_mult_subdegree_ge[of f g] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1933 |
fls_times_base_factor_conv_shifted_times[of f g] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1934 |
by (simp_all add: assms fls_X_power_conv_shift_1 algebra_simps) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1935 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1936 |
lemma fls_fps_normalized_product_of_inverses: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1937 |
assumes "f * g = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1938 |
shows "fls_base_factor_to_fps f * fls_base_factor_to_fps g = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1939 |
fps_X ^ (nat (-(fls_subdegree f+fls_subdegree g)))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1940 |
using fls_times_conv_regpart[of "fls_base_factor f" "fls_base_factor g"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1941 |
fls_base_factor_subdegree[of f] fls_base_factor_subdegree[of g] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1942 |
fls_normalized_product_of_inverses(1)[OF assms] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1943 |
by (force simp: fls_X_pow_conv_fps_X_pow) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1944 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1945 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1946 |
subsubsection \<open>Inverses\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1947 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1948 |
\<comment> \<open>See lemma fls_left_inverse\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1949 |
abbreviation fls_left_inverse :: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1950 |
"'a::{comm_monoid_add,uminus,times} fls \<Rightarrow> 'a \<Rightarrow> 'a fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1951 |
where |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1952 |
"fls_left_inverse f x \<equiv> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1953 |
fls_shift (fls_subdegree f) (fps_to_fls (fps_left_inverse (fls_base_factor_to_fps f) x))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1954 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1955 |
\<comment> \<open>See lemma fls_right_inverse\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1956 |
abbreviation fls_right_inverse :: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1957 |
"'a::{comm_monoid_add,uminus,times} fls \<Rightarrow> 'a \<Rightarrow> 'a fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1958 |
where |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1959 |
"fls_right_inverse f y \<equiv> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1960 |
fls_shift (fls_subdegree f) (fps_to_fls (fps_right_inverse (fls_base_factor_to_fps f) y))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1961 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1962 |
instantiation fls :: ("{comm_monoid_add,uminus,times,inverse}") inverse |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1963 |
begin |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1964 |
definition fls_divide_def: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1965 |
"f div g = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1966 |
fls_shift (fls_subdegree g - fls_subdegree f) ( |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1967 |
fps_to_fls ((fls_base_factor_to_fps f) div (fls_base_factor_to_fps g)) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1968 |
) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1969 |
" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1970 |
definition fls_inverse_def: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1971 |
"inverse f = fls_shift (fls_subdegree f) (fps_to_fls (inverse (fls_base_factor_to_fps f)))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1972 |
instance .. |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1973 |
end |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1974 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1975 |
lemma fls_inverse_def': |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1976 |
"inverse f = fls_right_inverse f (inverse (f $$ fls_subdegree f))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1977 |
by (simp add: fls_inverse_def fps_inverse_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1978 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1979 |
lemma fls_lr_inverse_base: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1980 |
"fls_left_inverse f x $$ (-fls_subdegree f) = x" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1981 |
"fls_right_inverse f y $$ (-fls_subdegree f) = y" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1982 |
by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1983 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1984 |
lemma fls_inverse_base: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1985 |
"f \<noteq> 0 \<Longrightarrow> inverse f $$ (-fls_subdegree f) = inverse (f $$ fls_subdegree f)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1986 |
by (simp add: fls_inverse_def') |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1987 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1988 |
lemma fls_lr_inverse_starting0: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1989 |
fixes f :: "'a::{comm_monoid_add,mult_zero,uminus} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1990 |
and g :: "'b::{ab_group_add,mult_zero} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1991 |
shows "fls_left_inverse f 0 = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1992 |
and "fls_right_inverse g 0 = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1993 |
by (simp_all add: fps_lr_inverse_starting0) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1994 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1995 |
lemma fls_lr_inverse_eq0_imp_starting0: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1996 |
"fls_left_inverse f x = 0 \<Longrightarrow> x = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1997 |
"fls_right_inverse f x = 0 \<Longrightarrow> x = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1998 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1999 |
assume "fls_left_inverse f x = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2000 |
hence "fps_left_inverse (fls_base_factor_to_fps f) x = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2001 |
using fls_shift_eq_iff fps_to_fls_eq_zero_iff by fastforce |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2002 |
thus "x = 0" using fps_lr_inverse_eq0_imp_starting0(1) by fast |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2003 |
next |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2004 |
assume "fls_right_inverse f x = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2005 |
hence "fps_right_inverse (fls_base_factor_to_fps f) x = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2006 |
using fls_shift_eq_iff fps_to_fls_eq_zero_iff by fastforce |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2007 |
thus "x = 0" using fps_lr_inverse_eq0_imp_starting0(2) by fast |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2008 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2009 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2010 |
lemma fls_lr_inverse_eq_0_iff: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2011 |
fixes x :: "'a::{comm_monoid_add,mult_zero,uminus}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2012 |
and y :: "'b::{ab_group_add,mult_zero}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2013 |
shows "fls_left_inverse f x = 0 \<longleftrightarrow> x = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2014 |
and "fls_right_inverse g y = 0 \<longleftrightarrow> y = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2015 |
using fls_lr_inverse_starting0 fls_lr_inverse_eq0_imp_starting0 |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2016 |
by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2017 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2018 |
lemma fls_inverse_eq_0_iff': |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2019 |
fixes f :: "'a::{ab_group_add,inverse,mult_zero} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2020 |
shows "inverse f = 0 \<longleftrightarrow> (inverse (f $$ fls_subdegree f) = 0)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2021 |
using fls_lr_inverse_eq_0_iff(2)[of f "inverse (f $$ fls_subdegree f)"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2022 |
by (simp add: fls_inverse_def') |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2023 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2024 |
lemma fls_inverse_eq_0_iff[simp]: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2025 |
"inverse f = (0:: ('a::division_ring) fls) \<longleftrightarrow> f $$ fls_subdegree f = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2026 |
using fls_inverse_eq_0_iff'[of f] by (cases "f=0") auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2027 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2028 |
lemmas fls_inverse_eq_0' = iffD2[OF fls_inverse_eq_0_iff'] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2029 |
lemmas fls_inverse_eq_0 = iffD2[OF fls_inverse_eq_0_iff] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2030 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2031 |
lemma fls_lr_inverse_const: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2032 |
fixes a :: "'a::{ab_group_add,mult_zero}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2033 |
and b :: "'b::{comm_monoid_add,mult_zero,uminus}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2034 |
shows "fls_left_inverse (fls_const a) x = fls_const x" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2035 |
and "fls_right_inverse (fls_const b) y = fls_const y" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2036 |
by (simp_all add: fps_const_lr_inverse) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2037 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2038 |
lemma fls_inverse_const: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2039 |
fixes a :: "'a::{comm_monoid_add,inverse,mult_zero,uminus}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2040 |
shows "inverse (fls_const a) = fls_const (inverse a)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2041 |
using fls_lr_inverse_const(2) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2042 |
by (auto simp: fls_inverse_def') |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2043 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2044 |
lemma fls_lr_inverse_of_nat: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2045 |
fixes x :: "'a::{ring_1,mult_zero}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2046 |
and y :: "'b::{semiring_1,uminus}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2047 |
shows "fls_left_inverse (of_nat n) x = fls_const x" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2048 |
and "fls_right_inverse (of_nat n) y = fls_const y" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2049 |
using fls_lr_inverse_const |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2050 |
by (auto simp: fls_of_nat) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2051 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2052 |
lemma fls_inverse_of_nat: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2053 |
"inverse (of_nat n :: 'a :: {semiring_1,inverse,uminus} fls) = fls_const (inverse (of_nat n))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2054 |
by (simp add: fls_inverse_const fls_of_nat) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2055 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2056 |
lemma fls_lr_inverse_of_int: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2057 |
fixes x :: "'a::{ring_1,mult_zero}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2058 |
shows "fls_left_inverse (of_int n) x = fls_const x" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2059 |
and "fls_right_inverse (of_int n) x = fls_const x" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2060 |
using fls_lr_inverse_const |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2061 |
by (auto simp: fls_of_int) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2062 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2063 |
lemma fls_inverse_of_int: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2064 |
"inverse (of_int n :: 'a :: {ring_1,inverse,uminus} fls) = fls_const (inverse (of_int n))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2065 |
by (simp add: fls_inverse_const fls_of_int) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2066 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2067 |
lemma fls_lr_inverse_zero: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2068 |
fixes x :: "'a::{ab_group_add,mult_zero}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2069 |
and y :: "'b::{comm_monoid_add,mult_zero,uminus}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2070 |
shows "fls_left_inverse 0 x = fls_const x" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2071 |
and "fls_right_inverse 0 y = fls_const y" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2072 |
using fls_lr_inverse_const[of 0] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2073 |
by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2074 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2075 |
lemma fls_inverse_zero_conv_fls_const: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2076 |
"inverse (0::'a::{comm_monoid_add,mult_zero,uminus,inverse} fls) = fls_const (inverse 0)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2077 |
using fls_lr_inverse_zero(2)[of "inverse (0::'a)"] by (simp add: fls_inverse_def') |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2078 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2079 |
lemma fls_inverse_zero': |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2080 |
assumes "inverse (0::'a::{comm_monoid_add,inverse,mult_zero,uminus}) = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2081 |
shows "inverse (0::'a fls) = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2082 |
by (simp add: fls_inverse_zero_conv_fls_const assms) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2083 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2084 |
lemma fls_inverse_zero [simp]: "inverse (0::'a::division_ring fls) = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2085 |
by (rule fls_inverse_zero'[OF inverse_zero]) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2086 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2087 |
lemma fls_inverse_base2: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2088 |
fixes f :: "'a::{comm_monoid_add,mult_zero,uminus,inverse} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2089 |
shows "inverse f $$ (-fls_subdegree f) = inverse (f $$ fls_subdegree f)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2090 |
by (cases "f=0") (simp_all add: fls_inverse_zero_conv_fls_const fls_inverse_def') |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2091 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2092 |
lemma fls_lr_inverse_one: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2093 |
fixes x :: "'a::{ab_group_add,mult_zero,one}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2094 |
and y :: "'b::{comm_monoid_add,mult_zero,uminus,one}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2095 |
shows "fls_left_inverse 1 x = fls_const x" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2096 |
and "fls_right_inverse 1 y = fls_const y" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2097 |
using fls_lr_inverse_const[of 1] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2098 |
by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2099 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2100 |
lemma fls_lr_inverse_one_one: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2101 |
"fls_left_inverse 1 1 = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2102 |
(1::'a::{ab_group_add,mult_zero,one} fls)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2103 |
"fls_right_inverse 1 1 = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2104 |
(1::'b::{comm_monoid_add,mult_zero,uminus,one} fls)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2105 |
using fls_lr_inverse_one[of 1] by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2106 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2107 |
lemma fls_inverse_one: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2108 |
assumes "inverse (1::'a::{comm_monoid_add,inverse,mult_zero,uminus,one}) = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2109 |
shows "inverse (1::'a fls) = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2110 |
using assms fls_lr_inverse_one_one(2) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2111 |
by (simp add: fls_inverse_def') |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2112 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2113 |
lemma fls_left_inverse_delta: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2114 |
fixes b :: "'a::{ab_group_add,mult_zero}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2115 |
assumes "b \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2116 |
shows "fls_left_inverse (Abs_fls (\<lambda>n. if n=a then b else 0)) x = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2117 |
Abs_fls (\<lambda>n. if n=-a then x else 0)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2118 |
proof (intro fls_eqI) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2119 |
fix n from assms show |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2120 |
"fls_left_inverse (Abs_fls (\<lambda>n. if n=a then b else 0)) x $$ n |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2121 |
= Abs_fls (\<lambda>n. if n = - a then x else 0) $$ n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2122 |
using fls_base_factor_to_fps_delta[of a b] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2123 |
fls_lr_inverse_const(1)[of b] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2124 |
fls_shift_const |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2125 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2126 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2127 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2128 |
lemma fls_right_inverse_delta: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2129 |
fixes b :: "'a::{comm_monoid_add,mult_zero,uminus}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2130 |
assumes "b \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2131 |
shows "fls_right_inverse (Abs_fls (\<lambda>n. if n=a then b else 0)) x = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2132 |
Abs_fls (\<lambda>n. if n=-a then x else 0)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2133 |
proof (intro fls_eqI) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2134 |
fix n from assms show |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2135 |
"fls_right_inverse (Abs_fls (\<lambda>n. if n=a then b else 0)) x $$ n |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2136 |
= Abs_fls (\<lambda>n. if n = - a then x else 0) $$ n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2137 |
using fls_base_factor_to_fps_delta[of a b] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2138 |
fls_lr_inverse_const(2)[of b] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2139 |
fls_shift_const |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2140 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2141 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2142 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2143 |
lemma fls_inverse_delta_nonzero: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2144 |
fixes b :: "'a::{comm_monoid_add,inverse,mult_zero,uminus}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2145 |
assumes "b \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2146 |
shows "inverse (Abs_fls (\<lambda>n. if n=a then b else 0)) = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2147 |
Abs_fls (\<lambda>n. if n=-a then inverse b else 0)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2148 |
using assms fls_nonzeroI[of "Abs_fls (\<lambda>n. if n=a then b else 0)" a] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2149 |
by (simp add: fls_inverse_def' fls_right_inverse_delta[symmetric]) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2150 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2151 |
lemma fls_inverse_delta: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2152 |
fixes b :: "'a::division_ring" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2153 |
shows "inverse (Abs_fls (\<lambda>n. if n=a then b else 0)) = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2154 |
Abs_fls (\<lambda>n. if n=-a then inverse b else 0)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2155 |
by (cases "b=0") (simp_all add: fls_inverse_delta_nonzero) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2156 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2157 |
lemma fls_lr_inverse_X: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2158 |
fixes x :: "'a::{ab_group_add,mult_zero,zero_neq_one}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2159 |
and y :: "'b::{comm_monoid_add,uminus,mult_zero,zero_neq_one}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2160 |
shows "fls_left_inverse fls_X x = fls_shift 1 (fls_const x)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2161 |
and "fls_right_inverse fls_X y = fls_shift 1 (fls_const y)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2162 |
using fls_lr_inverse_one(1)[of x] fls_lr_inverse_one(2)[of y] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2163 |
by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2164 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2165 |
lemma fls_lr_inverse_X': |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2166 |
fixes x :: "'a::{ab_group_add,mult_zero,zero_neq_one,monoid_mult}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2167 |
and y :: "'b::{comm_monoid_add,uminus,mult_zero,zero_neq_one,monoid_mult}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2168 |
shows "fls_left_inverse fls_X x = fls_const x * fls_X_inv" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2169 |
and "fls_right_inverse fls_X y = fls_const y * fls_X_inv" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2170 |
using fls_lr_inverse_X(1)[of x] fls_lr_inverse_X(2)[of y] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2171 |
by (simp_all add: fls_X_inv_times_conv_shift(2)) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2172 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2173 |
lemma fls_inverse_X': |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2174 |
assumes "inverse 1 = (1::'a::{comm_monoid_add,inverse,mult_zero,uminus,zero_neq_one})" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2175 |
shows "inverse (fls_X::'a fls) = fls_X_inv" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2176 |
using assms fls_lr_inverse_X(2)[of "1::'a"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2177 |
by (simp add: fls_inverse_def' fls_X_inv_conv_shift_1) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2178 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2179 |
lemma fls_inverse_X: "inverse (fls_X::'a::division_ring fls) = fls_X_inv" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2180 |
by (simp add: fls_inverse_X') |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2181 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2182 |
lemma fls_lr_inverse_X_inv: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2183 |
fixes x :: "'a::{ab_group_add,mult_zero,zero_neq_one}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2184 |
and y :: "'b::{comm_monoid_add,uminus,mult_zero,zero_neq_one}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2185 |
shows "fls_left_inverse fls_X_inv x = fls_shift (-1) (fls_const x)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2186 |
and "fls_right_inverse fls_X_inv y = fls_shift (-1) (fls_const y)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2187 |
using fls_lr_inverse_one(1)[of x] fls_lr_inverse_one(2)[of y] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2188 |
by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2189 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2190 |
lemma fls_lr_inverse_X_inv': |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2191 |
fixes x :: "'a::{ab_group_add,mult_zero,zero_neq_one,monoid_mult}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2192 |
and y :: "'b::{comm_monoid_add,uminus,mult_zero,zero_neq_one,monoid_mult}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2193 |
shows "fls_left_inverse fls_X_inv x = fls_const x * fls_X" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2194 |
and "fls_right_inverse fls_X_inv y = fls_const y * fls_X" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2195 |
using fls_lr_inverse_X_inv(1)[of x] fls_lr_inverse_X_inv(2)[of y] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2196 |
by (simp_all add: fls_X_times_conv_shift(2)) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2197 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2198 |
lemma fls_inverse_X_inv': |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2199 |
assumes "inverse 1 = (1::'a::{comm_monoid_add,inverse,mult_zero,uminus,zero_neq_one})" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2200 |
shows "inverse (fls_X_inv::'a fls) = fls_X" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2201 |
using assms fls_lr_inverse_X_inv(2)[of "1::'a"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2202 |
by (simp add: fls_inverse_def' fls_X_conv_shift_1) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2203 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2204 |
lemma fls_inverse_X_inv: "inverse (fls_X_inv::'a::division_ring fls) = fls_X" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2205 |
by (simp add: fls_inverse_X_inv') |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2206 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2207 |
lemma fls_lr_inverse_subdegree: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2208 |
assumes "x \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2209 |
shows "fls_subdegree (fls_left_inverse f x) = - fls_subdegree f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2210 |
and "fls_subdegree (fls_right_inverse f x) = - fls_subdegree f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2211 |
by (auto intro: fls_subdegree_eqI simp: assms) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2212 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2213 |
lemma fls_inverse_subdegree': |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2214 |
"inverse (f $$ fls_subdegree f) \<noteq> 0 \<Longrightarrow> fls_subdegree (inverse f) = - fls_subdegree f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2215 |
using fls_lr_inverse_subdegree(2)[of "inverse (f $$ fls_subdegree f)"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2216 |
by (simp add: fls_inverse_def') |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2217 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2218 |
lemma fls_inverse_subdegree [simp]: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2219 |
fixes f :: "'a::division_ring fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2220 |
shows "fls_subdegree (inverse f) = - fls_subdegree f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2221 |
by (cases "f=0") |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2222 |
(auto intro: fls_inverse_subdegree' simp: nonzero_imp_inverse_nonzero) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2223 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2224 |
lemma fls_inverse_subdegree_base_nonzero: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2225 |
assumes "f \<noteq> 0" "inverse (f $$ fls_subdegree f) \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2226 |
shows "inverse f $$ (fls_subdegree (inverse f)) = inverse (f $$ fls_subdegree f)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2227 |
using assms fls_inverse_subdegree'[of f] fls_inverse_base[of f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2228 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2229 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2230 |
lemma fls_inverse_subdegree_base: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2231 |
fixes f :: "'a::{ab_group_add,inverse,mult_zero} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2232 |
shows "inverse f $$ (fls_subdegree (inverse f)) = inverse (f $$ fls_subdegree f)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2233 |
using fls_inverse_eq_0_iff'[of f] fls_inverse_subdegree_base_nonzero[of f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2234 |
by (cases "f=0 \<or> inverse (f $$ fls_subdegree f) = 0") |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2235 |
(auto simp: fls_inverse_zero_conv_fls_const) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2236 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2237 |
lemma fls_lr_inverse_subdegree_0: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2238 |
assumes "fls_subdegree f = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2239 |
shows "fls_subdegree (fls_left_inverse f x) \<ge> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2240 |
and "fls_subdegree (fls_right_inverse f x) \<ge> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2241 |
using fls_subdegree_ge0I[of "fls_left_inverse f x"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2242 |
fls_subdegree_ge0I[of "fls_right_inverse f x"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2243 |
by (auto simp: assms) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2244 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2245 |
lemma fls_inverse_subdegree_0: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2246 |
"fls_subdegree f = 0 \<Longrightarrow> fls_subdegree (inverse f) \<ge> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2247 |
using fls_lr_inverse_subdegree_0(2)[of f] by (simp add: fls_inverse_def') |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2248 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2249 |
lemma fls_lr_inverse_shift_nonzero: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2250 |
fixes f :: "'a::{comm_monoid_add,mult_zero,uminus} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2251 |
assumes "f \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2252 |
shows "fls_left_inverse (fls_shift m f) x = fls_shift (-m) (fls_left_inverse f x)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2253 |
and "fls_right_inverse (fls_shift m f) x = fls_shift (-m) (fls_right_inverse f x)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2254 |
using assms fls_base_factor_to_fps_shift[of m f] fls_shift_subdegree |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2255 |
by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2256 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2257 |
lemma fls_inverse_shift_nonzero: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2258 |
fixes f :: "'a::{comm_monoid_add,inverse,mult_zero,uminus} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2259 |
assumes "f \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2260 |
shows "inverse (fls_shift m f) = fls_shift (-m) (inverse f)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2261 |
using assms fls_lr_inverse_shift_nonzero(2)[of f m "inverse (f $$ fls_subdegree f)"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2262 |
by (simp add: fls_inverse_def') |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2263 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2264 |
lemma fls_inverse_shift: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2265 |
fixes f :: "'a::division_ring fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2266 |
shows "inverse (fls_shift m f) = fls_shift (-m) (inverse f)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2267 |
using fls_inverse_shift_nonzero |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2268 |
by (cases "f=0") simp_all |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2269 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2270 |
lemma fls_left_inverse_base_factor: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2271 |
fixes x :: "'a::{ab_group_add,mult_zero}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2272 |
assumes "x \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2273 |
shows "fls_left_inverse (fls_base_factor f) x = fls_base_factor (fls_left_inverse f x)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2274 |
using assms fls_lr_inverse_zero(1)[of x] fls_lr_inverse_subdegree(1)[of x] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2275 |
by (cases "f=0") auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2276 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2277 |
lemma fls_right_inverse_base_factor: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2278 |
fixes y :: "'a::{comm_monoid_add,mult_zero,uminus}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2279 |
assumes "y \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2280 |
shows "fls_right_inverse (fls_base_factor f) y = fls_base_factor (fls_right_inverse f y)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2281 |
using assms fls_lr_inverse_zero(2)[of y] fls_lr_inverse_subdegree(2)[of y] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2282 |
by (cases "f=0") auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2283 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2284 |
lemma fls_inverse_base_factor': |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2285 |
fixes f :: "'a::{comm_monoid_add,inverse,mult_zero,uminus} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2286 |
assumes "inverse (f $$ fls_subdegree f) \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2287 |
shows "inverse (fls_base_factor f) = fls_base_factor (inverse f)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2288 |
by (cases "f=0") |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2289 |
(simp_all add: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2290 |
assms fls_inverse_shift_nonzero fls_inverse_subdegree' |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2291 |
fls_inverse_zero_conv_fls_const |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2292 |
) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2293 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2294 |
lemma fls_inverse_base_factor: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2295 |
fixes f :: "'a::{ab_group_add,inverse,mult_zero} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2296 |
shows "inverse (fls_base_factor f) = fls_base_factor (inverse f)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2297 |
using fls_base_factor_base[of f] fls_inverse_eq_0_iff'[of f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2298 |
fls_inverse_eq_0_iff'[of "fls_base_factor f"] fls_inverse_base_factor'[of f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2299 |
by (cases "inverse (f $$ fls_subdegree f) = 0") simp_all |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2300 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2301 |
lemma fls_lr_inverse_regpart: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2302 |
assumes "fls_subdegree f = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2303 |
shows "fls_regpart (fls_left_inverse f x) = fps_left_inverse (fls_regpart f) x" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2304 |
and "fls_regpart (fls_right_inverse f y) = fps_right_inverse (fls_regpart f) y" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2305 |
using assms |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2306 |
by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2307 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2308 |
lemma fls_inverse_regpart: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2309 |
assumes "fls_subdegree f = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2310 |
shows "fls_regpart (inverse f) = inverse (fls_regpart f)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2311 |
by (simp add: assms fls_inverse_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2312 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2313 |
lemma fls_base_factor_to_fps_left_inverse: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2314 |
fixes x :: "'a::{ab_group_add,mult_zero}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2315 |
shows "fls_base_factor_to_fps (fls_left_inverse f x) = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2316 |
fps_left_inverse (fls_base_factor_to_fps f) x" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2317 |
using fls_left_inverse_base_factor[of x f] fls_base_factor_subdegree[of f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2318 |
by (cases "x=0") (simp_all add: fls_lr_inverse_starting0(1) fps_lr_inverse_starting0(1)) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2319 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2320 |
lemma fls_base_factor_to_fps_right_inverse_nonzero: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2321 |
fixes y :: "'a::{comm_monoid_add,mult_zero,uminus}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2322 |
assumes "y \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2323 |
shows "fls_base_factor_to_fps (fls_right_inverse f y) = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2324 |
fps_right_inverse (fls_base_factor_to_fps f) y" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2325 |
using assms fls_right_inverse_base_factor[of y f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2326 |
fls_base_factor_subdegree[of f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2327 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2328 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2329 |
lemma fls_base_factor_to_fps_right_inverse: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2330 |
fixes y :: "'a::{ab_group_add,mult_zero}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2331 |
shows "fls_base_factor_to_fps (fls_right_inverse f y) = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2332 |
fps_right_inverse (fls_base_factor_to_fps f) y" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2333 |
using fls_base_factor_to_fps_right_inverse_nonzero[of y f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2334 |
by (cases "y=0") (simp_all add: fls_lr_inverse_starting0(2) fps_lr_inverse_starting0(2)) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2335 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2336 |
lemma fls_base_factor_to_fps_inverse_nonzero: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2337 |
fixes f :: "'a::{comm_monoid_add,inverse,mult_zero,uminus} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2338 |
assumes "inverse (f $$ fls_subdegree f) \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2339 |
shows "fls_base_factor_to_fps (inverse f) = inverse (fls_base_factor_to_fps f)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2340 |
using assms fls_base_factor_to_fps_right_inverse_nonzero |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2341 |
by (simp add: fls_inverse_def' fps_inverse_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2342 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2343 |
lemma fls_base_factor_to_fps_inverse: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2344 |
fixes f :: "'a::{ab_group_add,inverse,mult_zero} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2345 |
shows "fls_base_factor_to_fps (inverse f) = inverse (fls_base_factor_to_fps f)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2346 |
using fls_base_factor_to_fps_right_inverse |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2347 |
by (simp add: fls_inverse_def' fps_inverse_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2348 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2349 |
lemma fls_lr_inverse_fps_to_fls: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2350 |
assumes "subdegree f = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2351 |
shows "fls_left_inverse (fps_to_fls f) x = fps_to_fls (fps_left_inverse f x)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2352 |
and "fls_right_inverse (fps_to_fls f) x = fps_to_fls (fps_right_inverse f x)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2353 |
using assms fls_base_factor_to_fps_to_fls[of f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2354 |
by (simp_all add: fls_subdegree_fls_to_fps) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2355 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2356 |
lemma fls_inverse_fps_to_fls: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2357 |
"subdegree f = 0 \<Longrightarrow> inverse (fps_to_fls f) = fps_to_fls (inverse f)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2358 |
using nth_subdegree_nonzero[of f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2359 |
by (cases "f=0") |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2360 |
(auto simp add: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2361 |
fps_to_fls_nonzeroI fls_inverse_def' fls_subdegree_fls_to_fps fps_inverse_def |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2362 |
fls_lr_inverse_fps_to_fls(2) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2363 |
) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2364 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2365 |
lemma fls_lr_inverse_X_power: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2366 |
fixes x :: "'a::ring_1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2367 |
and y :: "'b::{semiring_1,uminus}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2368 |
shows "fls_left_inverse (fls_X ^ n) x = fls_shift n (fls_const x)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2369 |
and "fls_right_inverse (fls_X ^ n) y = fls_shift n (fls_const y)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2370 |
using fls_lr_inverse_one(1)[of x] fls_lr_inverse_one(2)[of y] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2371 |
by (simp_all add: fls_X_power_conv_shift_1) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2372 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2373 |
lemma fls_lr_inverse_X_power': |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2374 |
fixes x :: "'a::ring_1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2375 |
and y :: "'b::{semiring_1,uminus}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2376 |
shows "fls_left_inverse (fls_X ^ n) x = fls_const x * fls_X_inv ^ n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2377 |
and "fls_right_inverse (fls_X ^ n) y = fls_const y * fls_X_inv ^ n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2378 |
using fls_lr_inverse_X_power(1)[of n x] fls_lr_inverse_X_power(2)[of n y] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2379 |
by (simp_all add: fls_X_inv_power_times_conv_shift(2)) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2380 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2381 |
lemma fls_inverse_X_power': |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2382 |
assumes "inverse 1 = (1::'a::{semiring_1,uminus,inverse})" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2383 |
shows "inverse ((fls_X ^ n)::'a fls) = fls_X_inv ^ n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2384 |
using fls_lr_inverse_X_power'(2)[of n 1] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2385 |
by (simp add: fls_inverse_def' assms ) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2386 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2387 |
lemma fls_inverse_X_power: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2388 |
"inverse ((fls_X::'a::division_ring fls) ^ n) = fls_X_inv ^ n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2389 |
by (simp add: fls_inverse_X_power') |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2390 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2391 |
lemma fls_lr_inverse_X_inv_power: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2392 |
fixes x :: "'a::ring_1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2393 |
and y :: "'b::{semiring_1,uminus}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2394 |
shows "fls_left_inverse (fls_X_inv ^ n) x = fls_shift (-n) (fls_const x)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2395 |
and "fls_right_inverse (fls_X_inv ^ n) y = fls_shift (-n) (fls_const y)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2396 |
using fls_lr_inverse_one(1)[of x] fls_lr_inverse_one(2)[of y] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2397 |
by (simp_all add: fls_X_inv_power_conv_shift_1) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2398 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2399 |
lemma fls_lr_inverse_X_inv_power': |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2400 |
fixes x :: "'a::ring_1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2401 |
and y :: "'b::{semiring_1,uminus}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2402 |
shows "fls_left_inverse (fls_X_inv ^ n) x = fls_const x * fls_X ^ n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2403 |
and "fls_right_inverse (fls_X_inv ^ n) y = fls_const y * fls_X ^ n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2404 |
using fls_lr_inverse_X_inv_power(1)[of n x] fls_lr_inverse_X_inv_power(2)[of n y] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2405 |
by (simp_all add: fls_X_power_times_conv_shift(2)) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2406 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2407 |
lemma fls_inverse_X_inv_power': |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2408 |
assumes "inverse 1 = (1::'a::{semiring_1,uminus,inverse})" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2409 |
shows "inverse ((fls_X_inv ^ n)::'a fls) = fls_X ^ n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2410 |
using fls_lr_inverse_X_inv_power'(2)[of n 1] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2411 |
by (simp add: fls_inverse_def' assms) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2412 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2413 |
lemma fls_inverse_X_inv_power: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2414 |
"inverse ((fls_X_inv::'a::division_ring fls) ^ n) = fls_X ^ n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2415 |
by (simp add: fls_inverse_X_inv_power') |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2416 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2417 |
lemma fls_lr_inverse_X_intpow: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2418 |
fixes x :: "'a::ring_1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2419 |
and y :: "'b::{semiring_1,uminus}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2420 |
shows "fls_left_inverse (fls_X_intpow i) x = fls_shift i (fls_const x)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2421 |
and "fls_right_inverse (fls_X_intpow i) y = fls_shift i (fls_const y)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2422 |
using fls_lr_inverse_one(1)[of x] fls_lr_inverse_one(2)[of y] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2423 |
by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2424 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2425 |
lemma fls_lr_inverse_X_intpow': |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2426 |
fixes x :: "'a::ring_1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2427 |
and y :: "'b::{semiring_1,uminus}" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2428 |
shows "fls_left_inverse (fls_X_intpow i) x = fls_const x * fls_X_intpow (-i)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2429 |
and "fls_right_inverse (fls_X_intpow i) y = fls_const y * fls_X_intpow (-i)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2430 |
using fls_lr_inverse_X_intpow(1)[of i x] fls_lr_inverse_X_intpow(2)[of i y] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2431 |
by (simp_all add: fls_shifted_times_simps(1)) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2432 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2433 |
lemma fls_inverse_X_intpow': |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2434 |
assumes "inverse 1 = (1::'a::{semiring_1,uminus,inverse})" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2435 |
shows "inverse (fls_X_intpow i :: 'a fls) = fls_X_intpow (-i)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2436 |
using fls_lr_inverse_X_intpow'(2)[of i 1] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2437 |
by (simp add: fls_inverse_def' assms) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2438 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2439 |
lemma fls_inverse_X_intpow: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2440 |
"inverse (fls_X_intpow i :: 'a::division_ring fls) = fls_X_intpow (-i)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2441 |
by (simp add: fls_inverse_X_intpow') |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2442 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2443 |
lemma fls_left_inverse: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2444 |
fixes f :: "'a::ring_1 fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2445 |
assumes "x * f $$ fls_subdegree f = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2446 |
shows "fls_left_inverse f x * f = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2447 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2448 |
from assms have "x \<noteq> 0" "x * (fls_base_factor_to_fps f$0) = 1" by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2449 |
thus ?thesis |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2450 |
using fls_base_factor_to_fps_left_inverse[of f x] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2451 |
fls_lr_inverse_subdegree(1)[of x] fps_left_inverse |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2452 |
by (fastforce simp: fls_times_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2453 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2454 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2455 |
lemma fls_right_inverse: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2456 |
fixes f :: "'a::ring_1 fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2457 |
assumes "f $$ fls_subdegree f * y = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2458 |
shows "f * fls_right_inverse f y = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2459 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2460 |
from assms have "y \<noteq> 0" "(fls_base_factor_to_fps f$0) * y = 1" by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2461 |
thus ?thesis |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2462 |
using fls_base_factor_to_fps_right_inverse[of f y] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2463 |
fls_lr_inverse_subdegree(2)[of y] fps_right_inverse |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2464 |
by (fastforce simp: fls_times_def) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2465 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2466 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2467 |
\<comment> \<open> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2468 |
It is possible in a ring for an element to have a left inverse but not a right inverse, or |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2469 |
vice versa. But when an element has both, they must be the same. |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2470 |
\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2471 |
lemma fls_left_inverse_eq_fls_right_inverse: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2472 |
fixes f :: "'a::ring_1 fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2473 |
assumes "x * f $$ fls_subdegree f = 1" "f $$ fls_subdegree f * y = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2474 |
\<comment> \<open>These assumptions imply x equals y, but no need to assume that.\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2475 |
shows "fls_left_inverse f x = fls_right_inverse f y" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2476 |
using assms |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2477 |
by (simp add: fps_left_inverse_eq_fps_right_inverse) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2478 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2479 |
lemma fls_left_inverse_eq_inverse: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2480 |
fixes f :: "'a::division_ring fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2481 |
shows "fls_left_inverse f (inverse (f $$ fls_subdegree f)) = inverse f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2482 |
proof (cases "f=0") |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2483 |
case True |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2484 |
hence "fls_left_inverse f (inverse (f $$ fls_subdegree f)) = fls_const (0::'a)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2485 |
by (simp add: fls_lr_inverse_zero(1)[symmetric]) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2486 |
with True show ?thesis by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2487 |
next |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2488 |
case False thus ?thesis |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2489 |
using fls_left_inverse_eq_fls_right_inverse[of "inverse (f $$ fls_subdegree f)"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2490 |
by (auto simp add: fls_inverse_def') |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2491 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2492 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2493 |
lemma fls_right_inverse_eq_inverse: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2494 |
fixes f :: "'a::division_ring fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2495 |
shows "fls_right_inverse f (inverse (f $$ fls_subdegree f)) = inverse f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2496 |
proof (cases "f=0") |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2497 |
case True |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2498 |
hence "fls_right_inverse f (inverse (f $$ fls_subdegree f)) = fls_const (0::'a)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2499 |
by (simp add: fls_lr_inverse_zero(2)[symmetric]) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2500 |
with True show ?thesis by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2501 |
qed (simp add: fls_inverse_def') |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2502 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2503 |
lemma fls_left_inverse_eq_fls_right_inverse_comm: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2504 |
fixes f :: "'a::comm_ring_1 fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2505 |
assumes "x * f $$ fls_subdegree f = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2506 |
shows "fls_left_inverse f x = fls_right_inverse f x" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2507 |
using assms fls_left_inverse_eq_fls_right_inverse[of x f x] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2508 |
by (simp add: mult.commute) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2509 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2510 |
lemma fls_left_inverse': |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2511 |
fixes f :: "'a::ring_1 fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2512 |
assumes "x * f $$ fls_subdegree f = 1" "f $$ fls_subdegree f * y = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2513 |
\<comment> \<open>These assumptions imply x equals y, but no need to assume that.\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2514 |
shows "fls_right_inverse f y * f = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2515 |
using assms fls_left_inverse_eq_fls_right_inverse[of x f y] fls_left_inverse[of x f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2516 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2517 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2518 |
lemma fls_right_inverse': |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2519 |
fixes f :: "'a::ring_1 fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2520 |
assumes "x * f $$ fls_subdegree f = 1" "f $$ fls_subdegree f * y = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2521 |
\<comment> \<open>These assumptions imply x equals y, but no need to assume that.\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2522 |
shows "f * fls_left_inverse f x = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2523 |
using assms fls_left_inverse_eq_fls_right_inverse[of x f y] fls_right_inverse[of f y] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2524 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2525 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2526 |
lemma fls_mult_left_inverse_base_factor: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2527 |
fixes f :: "'a::ring_1 fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2528 |
assumes "x * (f $$ fls_subdegree f) = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2529 |
shows "fls_left_inverse (fls_base_factor f) x * f = fls_X_intpow (fls_subdegree f)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2530 |
using assms fls_base_factor_to_fps_base_factor[of f] fls_base_factor_subdegree[of f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2531 |
fls_shifted_times_simps(2)[of "-fls_subdegree f" "fls_left_inverse f x" f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2532 |
fls_left_inverse[of x f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2533 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2534 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2535 |
lemma fls_mult_right_inverse_base_factor: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2536 |
fixes f :: "'a::ring_1 fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2537 |
assumes "(f $$ fls_subdegree f) * y = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2538 |
shows "f * fls_right_inverse (fls_base_factor f) y = fls_X_intpow (fls_subdegree f)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2539 |
using assms fls_base_factor_to_fps_base_factor[of f] fls_base_factor_subdegree[of f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2540 |
fls_shifted_times_simps(1)[of f "-fls_subdegree f" "fls_right_inverse f y"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2541 |
fls_right_inverse[of f y] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2542 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2543 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2544 |
lemma fls_mult_inverse_base_factor: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2545 |
fixes f :: "'a::division_ring fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2546 |
assumes "f \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2547 |
shows "f * inverse (fls_base_factor f) = fls_X_intpow (fls_subdegree f)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2548 |
using fls_mult_right_inverse_base_factor[of f "inverse (f $$ fls_subdegree f)"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2549 |
fls_base_factor_base[of f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2550 |
by (simp add: assms fls_right_inverse_eq_inverse[symmetric]) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2551 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2552 |
lemma fls_left_inverse_idempotent_ring1: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2553 |
fixes f :: "'a::ring_1 fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2554 |
assumes "x * f $$ fls_subdegree f = 1" "y * x = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2555 |
\<comment> \<open>These assumptions imply y equals f $$ fls_subdegree f, but no need to assume that.\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2556 |
shows "fls_left_inverse (fls_left_inverse f x) y = f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2557 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2558 |
from assms(1) have |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2559 |
"fls_left_inverse (fls_left_inverse f x) y * fls_left_inverse f x * f = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2560 |
fls_left_inverse (fls_left_inverse f x) y" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2561 |
using fls_left_inverse[of x f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2562 |
by (simp add: mult.assoc) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2563 |
moreover have |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2564 |
"fls_left_inverse (fls_left_inverse f x) y * fls_left_inverse f x = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2565 |
using assms fls_lr_inverse_subdegree(1)[of x f] fls_lr_inverse_base(1)[of f x] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2566 |
by (fastforce intro: fls_left_inverse) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2567 |
ultimately show ?thesis by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2568 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2569 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2570 |
lemma fls_left_inverse_idempotent_comm_ring1: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2571 |
fixes f :: "'a::comm_ring_1 fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2572 |
assumes "x * f $$ fls_subdegree f = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2573 |
shows "fls_left_inverse (fls_left_inverse f x) (f $$ fls_subdegree f) = f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2574 |
using assms fls_left_inverse_idempotent_ring1[of x f "f $$ fls_subdegree f"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2575 |
by (simp add: mult.commute) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2576 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2577 |
lemma fls_right_inverse_idempotent_ring1: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2578 |
fixes f :: "'a::ring_1 fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2579 |
assumes "f $$ fls_subdegree f * x = 1" "x * y = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2580 |
\<comment> \<open>These assumptions imply y equals f $$ fls_subdegree f, but no need to assume that.\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2581 |
shows "fls_right_inverse (fls_right_inverse f x) y = f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2582 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2583 |
from assms(1) have |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2584 |
"f * (fls_right_inverse f x * fls_right_inverse (fls_right_inverse f x) y) = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2585 |
fls_right_inverse (fls_right_inverse f x) y" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2586 |
using fls_right_inverse [of f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2587 |
by (simp add: mult.assoc[symmetric]) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2588 |
moreover have |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2589 |
"fls_right_inverse f x * fls_right_inverse (fls_right_inverse f x) y = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2590 |
using assms fls_lr_inverse_subdegree(2)[of x f] fls_lr_inverse_base(2)[of f x] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2591 |
by (fastforce intro: fls_right_inverse) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2592 |
ultimately show ?thesis by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2593 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2594 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2595 |
lemma fls_right_inverse_idempotent_comm_ring1: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2596 |
fixes f :: "'a::comm_ring_1 fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2597 |
assumes "f $$ fls_subdegree f * x = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2598 |
shows "fls_right_inverse (fls_right_inverse f x) (f $$ fls_subdegree f) = f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2599 |
using assms fls_right_inverse_idempotent_ring1[of f x "f $$ fls_subdegree f"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2600 |
by (simp add: mult.commute) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2601 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2602 |
lemma fls_lr_inverse_unique_ring1: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2603 |
fixes f g :: "'a :: ring_1 fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2604 |
assumes fg: "f * g = 1" "g $$ fls_subdegree g * f $$ fls_subdegree f = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2605 |
shows "fls_left_inverse g (f $$ fls_subdegree f) = f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2606 |
and "fls_right_inverse f (g $$ fls_subdegree g) = g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2607 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2608 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2609 |
have "f $$ fls_subdegree f * g $$ fls_subdegree g \<noteq> 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2610 |
proof |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2611 |
assume "f $$ fls_subdegree f * g $$ fls_subdegree g = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2612 |
hence "f $$ fls_subdegree f * (g $$ fls_subdegree g * f $$ fls_subdegree f) = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2613 |
by (simp add: mult.assoc[symmetric]) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2614 |
with fg(2) show False by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2615 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2616 |
with fg(1) have subdeg_sum: "fls_subdegree f + fls_subdegree g = 0" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2617 |
using fls_mult_nonzero_base_subdegree_eq[of f g] by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2618 |
hence subdeg_sum': |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2619 |
"fls_subdegree f = -fls_subdegree g" "fls_subdegree g = -fls_subdegree f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2620 |
by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2621 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2622 |
from fg(1) have f_ne_0: "f\<noteq>0" by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2623 |
moreover have |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2624 |
"fps_left_inverse (fls_base_factor_to_fps g) (fls_regpart (fls_shift (-fls_subdegree g) f)$0) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2625 |
= fls_regpart (fls_shift (-fls_subdegree g) f)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2626 |
proof (intro fps_lr_inverse_unique_ring1(1)) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2627 |
from fg(1) show |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2628 |
"fls_regpart (fls_shift (-fls_subdegree g) f) * fls_base_factor_to_fps g = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2629 |
using f_ne_0 fls_times_conv_regpart[of "fls_shift (-fls_subdegree g) f" "fls_base_factor g"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2630 |
fls_base_factor_subdegree[of g] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2631 |
by (simp add: fls_times_both_shifted_simp subdeg_sum) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2632 |
from fg(2) show |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2633 |
"fls_base_factor_to_fps g $ 0 * fls_regpart (fls_shift (-fls_subdegree g) f) $ 0 = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2634 |
by (simp add: subdeg_sum'(2)) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2635 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2636 |
ultimately show "fls_left_inverse g (f $$ fls_subdegree f) = f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2637 |
by (simp add: subdeg_sum'(2)) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2638 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2639 |
from fg(1) have g_ne_0: "g\<noteq>0" by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2640 |
moreover have |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2641 |
"fps_right_inverse (fls_base_factor_to_fps f) (fls_regpart (fls_shift (-fls_subdegree f) g)$0) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2642 |
= fls_regpart (fls_shift (-fls_subdegree f) g)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2643 |
proof (intro fps_lr_inverse_unique_ring1(2)) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2644 |
from fg(1) show |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2645 |
"fls_base_factor_to_fps f * fls_regpart (fls_shift (-fls_subdegree f) g) = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2646 |
using g_ne_0 fls_times_conv_regpart[of "fls_base_factor f" "fls_shift (-fls_subdegree f) g"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2647 |
fls_base_factor_subdegree[of f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2648 |
by (simp add: fls_times_both_shifted_simp subdeg_sum add.commute) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2649 |
from fg(2) show |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2650 |
"fls_regpart (fls_shift (-fls_subdegree f) g) $ 0 * fls_base_factor_to_fps f $ 0 = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2651 |
by (simp add: subdeg_sum'(1)) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2652 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2653 |
ultimately show "fls_right_inverse f (g $$ fls_subdegree g) = g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2654 |
by (simp add: subdeg_sum'(2)) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2655 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2656 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2657 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2658 |
lemma fls_lr_inverse_unique_divring: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2659 |
fixes f g :: "'a ::division_ring fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2660 |
assumes fg: "f * g = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2661 |
shows "fls_left_inverse g (f $$ fls_subdegree f) = f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2662 |
and "fls_right_inverse f (g $$ fls_subdegree g) = g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2663 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2664 |
from fg have "f \<noteq>0" "g \<noteq> 0" by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2665 |
with fg have "fls_subdegree f + fls_subdegree g = 0" using fls_subdegree_mult by force |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2666 |
with fg have "f $$ fls_subdegree f * g $$ fls_subdegree g = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2667 |
using fls_times_base[of f g] by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2668 |
hence "g $$ fls_subdegree g * f $$ fls_subdegree f = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2669 |
using inverse_unique[of "f $$ fls_subdegree f"] left_inverse[of "f $$ fls_subdegree f"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2670 |
by force |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2671 |
thus |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2672 |
"fls_left_inverse g (f $$ fls_subdegree f) = f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2673 |
"fls_right_inverse f (g $$ fls_subdegree g) = g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2674 |
using fg fls_lr_inverse_unique_ring1 |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2675 |
by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2676 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2677 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2678 |
lemma fls_lr_inverse_minus: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2679 |
fixes f :: "'a::ring_1 fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2680 |
shows "fls_left_inverse (-f) (-x) = - fls_left_inverse f x" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2681 |
and "fls_right_inverse (-f) (-x) = - fls_right_inverse f x" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2682 |
by (simp_all add: fps_lr_inverse_minus) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2683 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2684 |
lemma fls_inverse_minus [simp]: "inverse (-f) = -inverse (f :: 'a :: division_ring fls)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2685 |
using fls_lr_inverse_minus(2)[of f] by (simp add: fls_inverse_def') |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2686 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2687 |
lemma fls_lr_inverse_mult_ring1: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2688 |
fixes f g :: "'a::ring_1 fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2689 |
assumes x: "x * f $$ fls_subdegree f = 1" "f $$ fls_subdegree f * x = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2690 |
and y: "y * g $$ fls_subdegree g = 1" "g $$ fls_subdegree g * y = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2691 |
shows "fls_left_inverse (f * g) (y*x) = fls_left_inverse g y * fls_left_inverse f x" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2692 |
and "fls_right_inverse (f * g) (y*x) = fls_right_inverse g y * fls_right_inverse f x" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2693 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2694 |
from x(1) y(2) have "x * (f $$ fls_subdegree f * g $$ fls_subdegree g) * y = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2695 |
by (simp add: mult.assoc) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2696 |
hence base_prod: "f $$ fls_subdegree f * g $$ fls_subdegree g \<noteq> 0" by auto |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2697 |
hence subdegrees: "fls_subdegree (f*g) = fls_subdegree f + fls_subdegree g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2698 |
using fls_mult_nonzero_base_subdegree_eq[of f g] by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2699 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2700 |
have norm: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2701 |
"fls_base_factor_to_fps (f * g) = fls_base_factor_to_fps f * fls_base_factor_to_fps g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2702 |
using base_prod fls_base_factor_to_fps_mult'[of f g] by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2703 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2704 |
have |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2705 |
"fls_left_inverse (f * g) (y*x) = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2706 |
fls_shift (fls_subdegree (f * g)) ( |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2707 |
fps_to_fls ( |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2708 |
fps_left_inverse (fls_base_factor_to_fps f * fls_base_factor_to_fps g) (y*x) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2709 |
) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2710 |
) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2711 |
" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2712 |
using norm |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2713 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2714 |
thus "fls_left_inverse (f * g) (y*x) = fls_left_inverse g y * fls_left_inverse f x" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2715 |
using x y |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2716 |
fps_lr_inverse_mult_ring1(1)[of |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2717 |
x "fls_base_factor_to_fps f" y "fls_base_factor_to_fps g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2718 |
] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2719 |
by (simp add: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2720 |
fls_times_both_shifted_simp fls_times_fps_to_fls subdegrees algebra_simps |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2721 |
) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2722 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2723 |
have |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2724 |
"fls_right_inverse (f * g) (y*x) = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2725 |
fls_shift (fls_subdegree (f * g)) ( |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2726 |
fps_to_fls ( |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2727 |
fps_right_inverse (fls_base_factor_to_fps f * fls_base_factor_to_fps g) (y*x) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2728 |
) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2729 |
) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2730 |
" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2731 |
using norm |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2732 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2733 |
thus "fls_right_inverse (f * g) (y*x) = fls_right_inverse g y * fls_right_inverse f x" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2734 |
using x y |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2735 |
fps_lr_inverse_mult_ring1(2)[of |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2736 |
x "fls_base_factor_to_fps f" y "fls_base_factor_to_fps g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2737 |
] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2738 |
by (simp add: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2739 |
fls_times_both_shifted_simp fls_times_fps_to_fls subdegrees algebra_simps |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2740 |
) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2741 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2742 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2743 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2744 |
lemma fls_lr_inverse_power_ring1: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2745 |
fixes f :: "'a::ring_1 fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2746 |
assumes x: "x * f $$ fls_subdegree f = 1" "f $$ fls_subdegree f * x = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2747 |
shows "fls_left_inverse (f ^ n) (x ^ n) = (fls_left_inverse f x) ^ n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2748 |
"fls_right_inverse (f ^ n) (x ^ n) = (fls_right_inverse f x) ^ n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2749 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2750 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2751 |
show "fls_left_inverse (f ^ n) (x ^ n) = (fls_left_inverse f x) ^ n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2752 |
proof (induct n) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2753 |
case 0 show ?case using fls_lr_inverse_one(1)[of 1] by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2754 |
next |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2755 |
case (Suc n) with assms show ?case |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2756 |
using fls_lr_inverse_mult_ring1(1)[of x f "x^n" "f^n"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2757 |
by (simp add: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2758 |
power_Suc2[symmetric] fls_unit_base_subdegree_power(1) left_right_inverse_power |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2759 |
) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2760 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2761 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2762 |
show "fls_right_inverse (f ^ n) (x ^ n) = (fls_right_inverse f x) ^ n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2763 |
proof (induct n) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2764 |
case 0 show ?case using fls_lr_inverse_one(2)[of 1] by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2765 |
next |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2766 |
case (Suc n) with assms show ?case |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2767 |
using fls_lr_inverse_mult_ring1(2)[of x f "x^n" "f^n"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2768 |
by (simp add: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2769 |
power_Suc2[symmetric] fls_unit_base_subdegree_power(1) left_right_inverse_power |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2770 |
) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2771 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2772 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2773 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2774 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2775 |
lemma fls_divide_convert_times_inverse: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2776 |
fixes f g :: "'a::{comm_monoid_add,inverse,mult_zero,uminus} fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2777 |
shows "f / g = f * inverse g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2778 |
using fls_base_factor_to_fps_subdegree[of g] fps_to_fls_base_factor_to_fps[of f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2779 |
fls_times_both_shifted_simp[of "-fls_subdegree f" "fls_base_factor f"] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2780 |
by (simp add: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2781 |
fls_divide_def fps_divide_unit' fls_times_fps_to_fls |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2782 |
fls_conv_base_factor_shift_subdegree fls_inverse_def |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2783 |
) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2784 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2785 |
instance fls :: (division_ring) division_ring |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2786 |
proof |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2787 |
fix a b :: "'a fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2788 |
show "a \<noteq> 0 \<Longrightarrow> inverse a * a = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2789 |
using fls_left_inverse'[of "inverse (a $$ fls_subdegree a)" a] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2790 |
by (simp add: fls_inverse_def') |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2791 |
show "a \<noteq> 0 \<Longrightarrow> a * inverse a = 1" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2792 |
using fls_right_inverse[of a] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2793 |
by (simp add: fls_inverse_def') |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2794 |
show "a / b = a * inverse b" using fls_divide_convert_times_inverse by fast |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2795 |
show "inverse (0::'a fls) = 0" by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2796 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2797 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2798 |
lemma fls_lr_inverse_mult_divring: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2799 |
fixes f g :: "'a::division_ring fls" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2800 |
and df dg :: int |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2801 |
defines "df \<equiv> fls_subdegree f" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2802 |
and "dg \<equiv> fls_subdegree g" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2803 |
shows "fls_left_inverse (f*g) (inverse ((f*g)$$(df+dg))) = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2804 |
fls_left_inverse g (inverse (g$$dg)) * fls_left_inverse f (inverse (f$$df))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2805 |
and "fls_right_inverse (f*g) (inverse ((f*g)$$(df+dg))) = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2806 |
fls_right_inverse g (inverse (g$$dg)) * fls_right_inverse f (inverse (f$$df))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2807 |
proof - |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2808 |
show |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2809 |
"fls_left_inverse (f*g) (inverse ((f*g)$$(df+dg))) = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2810 |
fls_left_inverse g (inverse (g$$dg)) * fls_left_inverse f (inverse (f$$df))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2811 |
proof (cases "f=0 \<or> g=0") |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2812 |
case True thus ?thesis |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2813 |
using fls_lr_inverse_zero(1)[of "inverse (0::'a)"] by (auto simp add: assms) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2814 |
next |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2815 |
case False thus ?thesis |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2816 |
using fls_left_inverse_eq_inverse[of "f*g"] nonzero_inverse_mult_distrib[of f g] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2817 |
fls_left_inverse_eq_inverse[of g] fls_left_inverse_eq_inverse[of f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2818 |
by (simp add: assms) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2819 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2820 |
show |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2821 |
"fls_right_inverse (f*g) (inverse ((f*g)$$(df+dg))) = |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2822 |
fls_right_inverse g (inverse (g$$dg)) * fls_right_inverse f (inverse (f$$df))" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2823 |
proof (cases "f=0 \<or> g=0") |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2824 |
case True thus ?thesis |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2825 |
using fls_lr_inverse_zero(2)[of "inverse (0::'a)"] by (auto simp add: assms) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2826 |
next |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2827 |
case False thus ?thesis |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2828 |
using fls_inverse_def'[of "f*g"] nonzero_inverse_mult_distrib[of f g] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2829 |
fls_inverse_def'[of g] fls_inverse_def'[of f] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2830 |
by (simp add: assms) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2831 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2832 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2833 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2834 |
lemma fls_lr_inverse_power_divring: |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2835 |
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
|
2836 |
shows "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
|
2837 |
(fls_left_inverse f (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
|
2838 |
"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
|
2839 |
(fls_right_inverse f (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
|
2840 |
proof - |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2841 |
have |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2842 |
"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
|
2843 |
inverse f ^ n" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2844 |
"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
|
2845 |
inverse 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
|
2846 |
using fls_left_inverse_eq_inverse[of "f^n"] fls_right_inverse_eq_inverse[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
|
2847 |
by (auto simp add: divide_simps 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
|
2848 |
thus |
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_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
|
2850 |
(fls_left_inverse f (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
|
2851 |
"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
|
2852 |
(fls_right_inverse f (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
|
2853 |
using fls_left_inverse_eq_inverse[of f] fls_right_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
|
2854 |
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
|
2855 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2856 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2857 |
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
|
2858 |
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
|
2859 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2860 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2861 |
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
|
2862 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2863 |
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
|
2864 |
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
|
2865 |
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
|
2866 |
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
|
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_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
|
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 |
shows |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2871 |
"(f 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
|
2872 |
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
|
2873 |
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
|
2874 |
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
|
2875 |
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
|
2876 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2877 |
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
|
2878 |
"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
|
2879 |
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
|
2880 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2881 |
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
|
2882 |
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
|
2883 |
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
|
2884 |
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
|
2885 |
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
|
2886 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2887 |
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
|
2888 |
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
|
2889 |
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
|
2890 |
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
|
2891 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2892 |
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
|
2893 |
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
|
2894 |
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
|
2895 |
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
|
2896 |
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
|
2897 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2898 |
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
|
2899 |
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
|
2900 |
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
|
2901 |
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
|
2902 |
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
|
2903 |
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
|
2904 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2905 |
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
|
2906 |
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
|
2907 |
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
|
2908 |
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
|
2909 |
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
|
2910 |
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
|
2911 |
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
|
2912 |
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
|
2913 |
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
|
2914 |
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
|
2915 |
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
|
2916 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2917 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2918 |
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
|
2919 |
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
|
2920 |
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
|
2921 |
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
|
2922 |
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
|
2923 |
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
|
2924 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2925 |
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
|
2926 |
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
|
2927 |
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
|
2928 |
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
|
2929 |
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
|
2930 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2931 |
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
|
2932 |
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
|
2933 |
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
|
2934 |
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
|
2935 |
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
|
2936 |
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
|
2937 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2938 |
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
|
2939 |
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
|
2940 |
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
|
2941 |
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
|
2942 |
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
|
2943 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2944 |
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
|
2945 |
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
|
2946 |
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
|
2947 |
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
|
2948 |
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
|
2949 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2950 |
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
|
2951 |
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
|
2952 |
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
|
2953 |
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
|
2954 |
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
|
2955 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2956 |
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
|
2957 |
"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
|
2958 |
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
|
2959 |
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
|
2960 |
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
|
2961 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2962 |
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
|
2963 |
"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
|
2964 |
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
|
2965 |
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
|
2966 |
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
|
2967 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2968 |
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
|
2969 |
"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
|
2970 |
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
|
2971 |
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
|
2972 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2973 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2974 |
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
|
2975 |
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
|
2976 |
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
|
2977 |
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
|
2978 |
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
|
2979 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2980 |
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
|
2981 |
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
|
2982 |
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
|
2983 |
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
|
2984 |
proof - |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2985 |
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
|
2986 |
"\<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
|
2987 |
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
|
2988 |
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
|
2989 |
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
|
2990 |
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
|
2991 |
) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
2992 |
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
|
2993 |
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
|
2994 |
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
|
2995 |
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
|
2996 |
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
|
2997 |
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
|
2998 |
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
|
2999 |
"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
|
3000 |
] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3001 |
fls_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
|
3002 |
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
|
3003 |
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
|
3004 |
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
|
3005 |
) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3006 |
qed (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
|
3007 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3008 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3009 |
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
|
3010 |
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
|
3011 |
shows |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3012 |
"fls_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
|
3013 |
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
|
3014 |
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
|
3015 |
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
|
3016 |
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
|
3017 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3018 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3019 |
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
|
3020 |
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
|
3021 |
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
|
3022 |
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
|
3023 |
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
|
3024 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3025 |
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
|
3026 |
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
|
3027 |
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
|
3028 |
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
|
3029 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3030 |
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
|
3031 |
"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
|
3032 |
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
|
3033 |
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
|
3034 |
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
|
3035 |
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
|
3036 |
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
|
3037 |
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
|
3038 |
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
|
3039 |
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
|
3040 |
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
|
3041 |
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
|
3042 |
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
|
3043 |
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
|
3044 |
qed |
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_1': |
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 :: "'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
|
3048 |
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
|
3049 |
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
|
3050 |
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
|
3051 |
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
|
3052 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3053 |
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
|
3054 |
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
|
3055 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3056 |
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
|
3057 |
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
|
3058 |
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
|
3059 |
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
|
3060 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3061 |
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
|
3062 |
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
|
3063 |
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
|
3064 |
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
|
3065 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3066 |
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
|
3067 |
"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
|
3068 |
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
|
3069 |
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
|
3070 |
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
|
3071 |
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
|
3072 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3073 |
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
|
3074 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3075 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3076 |
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
|
3077 |
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
|
3078 |
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
|
3079 |
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
|
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_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
|
3082 |
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
|
3083 |
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
|
3084 |
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
|
3085 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3086 |
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
|
3087 |
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
|
3088 |
"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
|
3089 |
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
|
3090 |
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
|
3091 |
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
|
3092 |
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
|
3093 |
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
|
3094 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3095 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3096 |
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
|
3097 |
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
|
3098 |
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
|
3099 |
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
|
3100 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3101 |
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
|
3102 |
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
|
3103 |
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
|
3104 |
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
|
3105 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3106 |
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
|
3107 |
"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
|
3108 |
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
|
3109 |
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
|
3110 |
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
|
3111 |
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
|
3112 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3113 |
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
|
3114 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3115 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3116 |
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
|
3117 |
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
|
3118 |
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
|
3119 |
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
|
3120 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3121 |
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
|
3122 |
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
|
3123 |
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
|
3124 |
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
|
3125 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3126 |
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
|
3127 |
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
|
3128 |
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
|
3129 |
"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
|
3130 |
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
|
3131 |
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
|
3132 |
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
|
3133 |
"\<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
|
3134 |
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
|
3135 |
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
|
3136 |
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
|
3137 |
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
|
3138 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3139 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3140 |
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
|
3141 |
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
|
3142 |
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
|
3143 |
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
|
3144 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3145 |
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
|
3146 |
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
|
3147 |
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
|
3148 |
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
|
3149 |
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
|
3150 |
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
|
3151 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3152 |
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
|
3153 |
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
|
3154 |
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
|
3155 |
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
|
3156 |
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
|
3157 |
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
|
3158 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3159 |
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
|
3160 |
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
|
3161 |
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
|
3162 |
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
|
3163 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3164 |
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
|
3165 |
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
|
3166 |
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
|
3167 |
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
|
3168 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3169 |
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
|
3170 |
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
|
3171 |
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
|
3172 |
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
|
3173 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3174 |
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
|
3175 |
"(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
|
3176 |
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
|
3177 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3178 |
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
|
3179 |
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
|
3180 |
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
|
3181 |
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
|
3182 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3183 |
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
|
3184 |
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
|
3185 |
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
|
3186 |
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
|
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_uminus: |
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 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
|
3190 |
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
|
3191 |
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
|
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_uminus': |
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 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
|
3195 |
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
|
3196 |
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
|
3197 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3198 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3199 |
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
|
3200 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3201 |
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
|
3202 |
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
|
3203 |
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
|
3204 |
proof |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3205 |
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
|
3206 |
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
|
3207 |
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
|
3208 |
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
|
3209 |
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
|
3210 |
next |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3211 |
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
|
3212 |
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
|
3213 |
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
|
3214 |
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
|
3215 |
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
|
3216 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3217 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3218 |
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
|
3219 |
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
|
3220 |
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
|
3221 |
proof |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3222 |
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
|
3223 |
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
|
3224 |
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
|
3225 |
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
|
3226 |
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
|
3227 |
next |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3228 |
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
|
3229 |
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
|
3230 |
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
|
3231 |
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
|
3232 |
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
|
3233 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3234 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3235 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3236 |
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
|
3237 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3238 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3239 |
subsubsection \<open>Derivative definition and basic properties\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
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 |
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
|
3242 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3243 |
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
|
3244 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3245 |
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
|
3246 |
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
|
3247 |
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
|
3248 |
qed |
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_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
|
3251 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3252 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3253 |
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
|
3254 |
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
|
3255 |
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
|
3256 |
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
|
3257 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3258 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3259 |
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
|
3260 |
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
|
3261 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3262 |
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
|
3263 |
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
|
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_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
|
3266 |
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
|
3267 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3268 |
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
|
3269 |
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
|
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 |
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
|
3272 |
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
|
3273 |
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
|
3274 |
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
|
3275 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3276 |
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
|
3277 |
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
|
3278 |
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
|
3279 |
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
|
3280 |
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
|
3281 |
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
|
3282 |
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
|
3283 |
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
|
3284 |
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
|
3285 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3286 |
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
|
3287 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3288 |
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
|
3289 |
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
|
3290 |
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
|
3291 |
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
|
3292 |
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
|
3293 |
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
|
3294 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3295 |
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
|
3296 |
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
|
3297 |
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
|
3298 |
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
|
3299 |
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
|
3300 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3301 |
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
|
3302 |
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
|
3303 |
rule. |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3304 |
\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3305 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3306 |
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
|
3307 |
"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
|
3308 |
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
|
3309 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3310 |
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
|
3311 |
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
|
3312 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3313 |
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
|
3314 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3315 |
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
|
3316 |
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
|
3317 |
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
|
3318 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3319 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3320 |
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
|
3321 |
"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
|
3322 |
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
|
3323 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3324 |
have |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3325 |
"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
|
3326 |
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
|
3327 |
by (simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3328 |
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
|
3329 |
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
|
3330 |
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
|
3331 |
) |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3332 |
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
|
3333 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3334 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3335 |
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
|
3336 |
"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
|
3337 |
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
|
3338 |
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
|
3339 |
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
|
3340 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3341 |
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
|
3342 |
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
|
3343 |
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
|
3344 |
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
|
3345 |
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
|
3346 |
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
|
3347 |
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
|
3348 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3349 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3350 |
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
|
3351 |
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
|
3352 |
\<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
|
3353 |
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
|
3354 |
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
|
3355 |
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
|
3356 |
show |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3357 |
"coeff (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
|
3358 |
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
|
3359 |
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
|
3360 |
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
|
3361 |
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
|
3362 |
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
|
3363 |
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
|
3364 |
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
|
3365 |
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
|
3366 |
"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
|
3367 |
- 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
|
3368 |
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
|
3369 |
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
|
3370 |
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
|
3371 |
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
|
3372 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3373 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3374 |
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
|
3375 |
"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
|
3376 |
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
|
3377 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3378 |
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
|
3379 |
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
|
3380 |
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
|
3381 |
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
|
3382 |
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
|
3383 |
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
|
3384 |
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
|
3385 |
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
|
3386 |
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
|
3387 |
next |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3388 |
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
|
3389 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3390 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3391 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3392 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3393 |
subsubsection \<open>Algebra rules of the derivative\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3394 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3395 |
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
|
3396 |
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
|
3397 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3398 |
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
|
3399 |
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
|
3400 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3401 |
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
|
3402 |
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
|
3403 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3404 |
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
|
3405 |
"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
|
3406 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3407 |
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
|
3408 |
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
|
3409 |
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
|
3410 |
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
|
3411 |
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
|
3412 |
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
|
3413 |
have |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3414 |
"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
|
3415 |
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
|
3416 |
"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
|
3417 |
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
|
3418 |
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
|
3419 |
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
|
3420 |
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
|
3421 |
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
|
3422 |
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
|
3423 |
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
|
3424 |
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
|
3425 |
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
|
3426 |
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
|
3427 |
"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
|
3428 |
( 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
|
3429 |
( 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
|
3430 |
" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3431 |
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
|
3432 |
"- (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
|
3433 |
] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3434 |
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
|
3435 |
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
|
3436 |
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
|
3437 |
"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
|
3438 |
"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
|
3439 |
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
|
3440 |
)" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3441 |
] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3442 |
fls_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
|
3443 |
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
|
3444 |
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
|
3445 |
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
|
3446 |
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
|
3447 |
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
|
3448 |
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
|
3449 |
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
|
3450 |
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
|
3451 |
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
|
3452 |
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
|
3453 |
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
|
3454 |
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
|
3455 |
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
|
3456 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3457 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3458 |
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
|
3459 |
"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
|
3460 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3461 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3462 |
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
|
3463 |
"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
|
3464 |
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
|
3465 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3466 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3467 |
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
|
3468 |
"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
|
3469 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3470 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3471 |
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
|
3472 |
"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
|
3473 |
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
|
3474 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3475 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3476 |
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
|
3477 |
"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
|
3478 |
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
|
3479 |
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
|
3480 |
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
|
3481 |
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
|
3482 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3483 |
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
|
3484 |
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
|
3485 |
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
|
3486 |
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
|
3487 |
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
|
3488 |
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
|
3489 |
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
|
3490 |
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
|
3491 |
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
|
3492 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3493 |
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
|
3494 |
"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
|
3495 |
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
|
3496 |
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
|
3497 |
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
|
3498 |
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
|
3499 |
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
|
3500 |
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
|
3501 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3502 |
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
|
3503 |
"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
|
3504 |
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
|
3505 |
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
|
3506 |
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
|
3507 |
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
|
3508 |
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
|
3509 |
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
|
3510 |
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
|
3511 |
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
|
3512 |
- (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
|
3513 |
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
|
3514 |
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
|
3515 |
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
|
3516 |
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
|
3517 |
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
|
3518 |
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
|
3519 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3520 |
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
|
3521 |
"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
|
3522 |
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
|
3523 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3524 |
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
|
3525 |
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
|
3526 |
\<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
|
3527 |
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
|
3528 |
- 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
|
3529 |
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
|
3530 |
- 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
|
3531 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3532 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3533 |
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
|
3534 |
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
|
3535 |
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
|
3536 |
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
|
3537 |
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
|
3538 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3539 |
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
|
3540 |
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
|
3541 |
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
|
3542 |
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
|
3543 |
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
|
3544 |
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
|
3545 |
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
|
3546 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3547 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3548 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3549 |
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
|
3550 |
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
|
3551 |
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
|
3552 |
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
|
3553 |
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
|
3554 |
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
|
3555 |
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
|
3556 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3557 |
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
|
3558 |
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
|
3559 |
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
|
3560 |
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
|
3561 |
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
|
3562 |
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
|
3563 |
"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
|
3564 |
] |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3565 |
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
|
3566 |
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
|
3567 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3568 |
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
|
3569 |
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
|
3570 |
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
|
3571 |
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
|
3572 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3573 |
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
|
3574 |
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
|
3575 |
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
|
3576 |
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
|
3577 |
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
|
3578 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3579 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3580 |
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
|
3581 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3582 |
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
|
3583 |
"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
|
3584 |
proof |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3585 |
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
|
3586 |
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
|
3587 |
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
|
3588 |
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
|
3589 |
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
|
3590 |
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
|
3591 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3592 |
next |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3593 |
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
|
3594 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3595 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3596 |
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
|
3597 |
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
|
3598 |
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
|
3599 |
proof - |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3600 |
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
|
3601 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3602 |
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
|
3603 |
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
|
3604 |
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
|
3605 |
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
|
3606 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3607 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3608 |
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
|
3609 |
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
|
3610 |
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
|
3611 |
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
|
3612 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3613 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3614 |
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
|
3615 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3616 |
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
|
3617 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3618 |
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
|
3619 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3620 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3621 |
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
|
3622 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3623 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3624 |
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
|
3625 |
"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
|
3626 |
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
|
3627 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3628 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3629 |
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
|
3630 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3631 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3632 |
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
|
3633 |
"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
|
3634 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3635 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3636 |
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
|
3637 |
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
|
3638 |
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
|
3639 |
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
|
3640 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3641 |
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
|
3642 |
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
|
3643 |
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
|
3644 |
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
|
3645 |
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
|
3646 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3647 |
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
|
3648 |
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
|
3649 |
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
|
3650 |
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
|
3651 |
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
|
3652 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3653 |
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
|
3654 |
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
|
3655 |
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
|
3656 |
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
|
3657 |
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
|
3658 |
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
|
3659 |
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
|
3660 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3661 |
define 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
|
3662 |
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
|
3663 |
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
|
3664 |
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
|
3665 |
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
|
3666 |
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
|
3667 |
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
|
3668 |
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
|
3669 |
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
|
3670 |
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
|
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 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3673 |
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
|
3674 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3675 |
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
|
3676 |
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
|
3677 |
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
|
3678 |
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
|
3679 |
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
|
3680 |
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
|
3681 |
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
|
3682 |
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
|
3683 |
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
|
3684 |
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
|
3685 |
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
|
3686 |
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
|
3687 |
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
|
3688 |
"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
|
3689 |
(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
|
3690 |
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
|
3691 |
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
|
3692 |
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
|
3693 |
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
|
3694 |
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
|
3695 |
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
|
3696 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3697 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3698 |
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
|
3699 |
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
|
3700 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3701 |
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
|
3702 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3703 |
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
|
3704 |
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
|
3705 |
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
|
3706 |
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
|
3707 |
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
|
3708 |
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
|
3709 |
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
|
3710 |
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
|
3711 |
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
|
3712 |
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
|
3713 |
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
|
3714 |
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
|
3715 |
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
|
3716 |
"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
|
3717 |
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
|
3718 |
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
|
3719 |
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
|
3720 |
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
|
3721 |
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
|
3722 |
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
|
3723 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3724 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3725 |
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
|
3726 |
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
|
3727 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3728 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3729 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3730 |
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
|
3731 |
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
|
3732 |
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
|
3733 |
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
|
3734 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3735 |
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
|
3736 |
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
|
3737 |
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
|
3738 |
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
|
3739 |
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
|
3740 |
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
|
3741 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3742 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3743 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3744 |
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
|
3745 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3746 |
\<comment> \<open>To incorporate a constant of integration, just add an fps_const.\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3747 |
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
|
3748 |
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
|
3749 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3750 |
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
|
3751 |
"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
|
3752 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3753 |
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
|
3754 |
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
|
3755 |
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
|
3756 |
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
|
3757 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3758 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3759 |
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
|
3760 |
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
|
3761 |
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
|
3762 |
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
|
3763 |
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
|
3764 |
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
|
3765 |
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
|
3766 |
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
|
3767 |
next |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3768 |
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
|
3769 |
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
|
3770 |
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
|
3771 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3772 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3773 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3774 |
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
|
3775 |
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
|
3776 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3777 |
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
|
3778 |
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
|
3779 |
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
|
3780 |
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
|
3781 |
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
|
3782 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3783 |
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
|
3784 |
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
|
3785 |
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
|
3786 |
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
|
3787 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3788 |
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
|
3789 |
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
|
3790 |
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
|
3791 |
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
|
3792 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3793 |
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
|
3794 |
"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
|
3795 |
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
|
3796 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3797 |
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
|
3798 |
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
|
3799 |
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
|
3800 |
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
|
3801 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3802 |
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
|
3803 |
"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
|
3804 |
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
|
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 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
|
3807 |
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
|
3808 |
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
|
3809 |
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
|
3810 |
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
|
3811 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3812 |
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
|
3813 |
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
|
3814 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3815 |
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
|
3816 |
"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
|
3817 |
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
|
3818 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3819 |
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
|
3820 |
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
|
3821 |
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
|
3822 |
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
|
3823 |
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
|
3824 |
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
|
3825 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3826 |
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
|
3827 |
"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
|
3828 |
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
|
3829 |
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
|
3830 |
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
|
3831 |
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
|
3832 |
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
|
3833 |
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
|
3834 |
qed |
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_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
|
3837 |
"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
|
3838 |
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
|
3839 |
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
|
3840 |
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
|
3841 |
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
|
3842 |
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
|
3843 |
thus |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3844 |
"fls_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
|
3845 |
(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
|
3846 |
by simp |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3847 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3848 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3849 |
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
|
3850 |
"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
|
3851 |
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
|
3852 |
proof - |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3853 |
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
|
3854 |
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
|
3855 |
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
|
3856 |
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
|
3857 |
"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
|
3858 |
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
|
3859 |
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
|
3860 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3861 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3862 |
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
|
3863 |
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
|
3864 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3865 |
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
|
3866 |
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
|
3867 |
shows |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3868 |
"fls_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
|
3869 |
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
|
3870 |
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
|
3871 |
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
|
3872 |
"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
|
3873 |
(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
|
3874 |
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
|
3875 |
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
|
3876 |
next |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3877 |
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
|
3878 |
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
|
3879 |
hence |
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_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
|
3881 |
(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
|
3882 |
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
|
3883 |
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
|
3884 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3885 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3886 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3887 |
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
|
3888 |
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
|
3889 |
shows |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3890 |
"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
|
3891 |
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
|
3892 |
proof- |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3893 |
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
|
3894 |
hence |
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_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
|
3896 |
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
|
3897 |
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
|
3898 |
"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
|
3899 |
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
|
3900 |
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
|
3901 |
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
|
3902 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3903 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3904 |
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
|
3905 |
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
|
3906 |
shows |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3907 |
"fls_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
|
3908 |
- 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
|
3909 |
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
|
3910 |
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
|
3911 |
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
|
3912 |
hence |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3913 |
"fls_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
|
3914 |
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
|
3915 |
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
|
3916 |
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
|
3917 |
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
|
3918 |
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
|
3919 |
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
|
3920 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3921 |
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
|
3922 |
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
|
3923 |
shows |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3924 |
"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
|
3925 |
- 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
|
3926 |
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
|
3927 |
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
|
3928 |
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
|
3929 |
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
|
3930 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3931 |
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
|
3932 |
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
|
3933 |
shows |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3934 |
"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
|
3935 |
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
|
3936 |
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
|
3937 |
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
|
3938 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3939 |
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
|
3940 |
"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
|
3941 |
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
|
3942 |
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
|
3943 |
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
|
3944 |
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
|
3945 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3946 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3947 |
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
|
3948 |
"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
|
3949 |
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
|
3950 |
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
|
3951 |
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
|
3952 |
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
|
3953 |
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
|
3954 |
next |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3955 |
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
|
3956 |
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
|
3957 |
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
|
3958 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3959 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3960 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3961 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3962 |
subsubsection \<open>Algebra rules of the integral\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3963 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3964 |
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
|
3965 |
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
|
3966 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3967 |
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
|
3968 |
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
|
3969 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3970 |
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
|
3971 |
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
|
3972 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3973 |
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
|
3974 |
"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
|
3975 |
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
|
3976 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3977 |
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
|
3978 |
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
|
3979 |
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
|
3980 |
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
|
3981 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3982 |
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
|
3983 |
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
|
3984 |
shows |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3985 |
"fls_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
|
3986 |
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
|
3987 |
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
|
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_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
|
3990 |
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
|
3991 |
shows |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3992 |
"fls_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
|
3993 |
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
|
3994 |
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
|
3995 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
3996 |
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
|
3997 |
"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
|
3998 |
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
|
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_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
|
4001 |
"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
|
4002 |
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
|
4003 |
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
|
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_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
|
4006 |
"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
|
4007 |
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
|
4008 |
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
|
4009 |
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
|
4010 |
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
|
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 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4013 |
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
|
4014 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4015 |
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
|
4016 |
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
|
4017 |
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
|
4018 |
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
|
4019 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4020 |
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
|
4021 |
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
|
4022 |
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
|
4023 |
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
|
4024 |
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
|
4025 |
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
|
4026 |
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
|
4027 |
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
|
4028 |
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
|
4029 |
next |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4030 |
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
|
4031 |
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
|
4032 |
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
|
4033 |
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
|
4034 |
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
|
4035 |
"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
|
4036 |
(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
|
4037 |
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
|
4038 |
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
|
4039 |
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
|
4040 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4041 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4042 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4043 |
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
|
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 |
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
|
4046 |
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
|
4047 |
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
|
4048 |
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
|
4049 |
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
|
4050 |
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
|
4051 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4052 |
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
|
4053 |
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
|
4054 |
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
|
4055 |
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
|
4056 |
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
|
4057 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4058 |
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
|
4059 |
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
|
4060 |
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
|
4061 |
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
|
4062 |
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
|
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 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4065 |
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
|
4066 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4067 |
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
|
4068 |
begin |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4069 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4070 |
definition |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4071 |
dist_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
|
4072 |
"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
|
4073 |
(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
|
4074 |
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
|
4075 |
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
|
4076 |
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
|
4077 |
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
|
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 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4080 |
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
|
4081 |
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
|
4082 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4083 |
definition uniformity_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
|
4084 |
"(uniformity :: ('a fls \<times> 'a fls) filter) = (INF e:{0 <..}. principal {(x, y). dist x y < e})" |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4085 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4086 |
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
|
4087 |
"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
|
4088 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4089 |
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
|
4090 |
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
|
4091 |
(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
|
4092 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4093 |
context |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4094 |
begin |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4095 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4096 |
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
|
4097 |
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
|
4098 |
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
|
4099 |
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
|
4100 |
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
|
4101 |
proof ( |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4102 |
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
|
4103 |
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
|
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 |
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
|
4106 |
next |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4107 |
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
|
4108 |
next |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4109 |
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
|
4110 |
next |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4111 |
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
|
4112 |
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
|
4113 |
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
|
4114 |
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
|
4115 |
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
|
4116 |
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
|
4117 |
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
|
4118 |
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
|
4119 |
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
|
4120 |
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
|
4121 |
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
|
4122 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4123 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4124 |
instance |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4125 |
proof |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4126 |
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
|
4127 |
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
|
4128 |
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
|
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 |
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
|
4131 |
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
|
4132 |
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
|
4133 |
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
|
4134 |
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
|
4135 |
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
|
4136 |
next |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4137 |
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
|
4138 |
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
|
4139 |
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
|
4140 |
next |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4141 |
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
|
4142 |
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
|
4143 |
proof - |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4144 |
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
|
4145 |
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
|
4146 |
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
|
4147 |
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
|
4148 |
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
|
4149 |
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
|
4150 |
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
|
4151 |
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
|
4152 |
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
|
4153 |
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
|
4154 |
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
|
4155 |
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
|
4156 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4157 |
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
|
4158 |
qed |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4159 |
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
|
4160 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4161 |
end |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4162 |
end |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4163 |
|
69792
d21789843f01
Resolved codegen problem with uniformity for formal Laurent series
Manuel Eberl <eberlm@in.tum.de>
parents:
69791
diff
changeset
|
4164 |
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:
69791
diff
changeset
|
4165 |
|
69791
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4166 |
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
|
4167 |
"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
|
4168 |
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
|
4169 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4170 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4171 |
subsection \<open>Notation bundle\<close> |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4172 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4173 |
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
|
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 |
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
|
4176 |
begin |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4177 |
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
|
4178 |
end |
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4179 |
|
195aeee8b30a
Formal Laurent series and overhaul of Formal power series (due to Jeremy Sylvestre)
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
4180 |
end |