finish more on the PolyType_0 lemma

This commit is contained in:
chelseaandmadrid 2023-06-15 15:10:30 -07:00
parent 61a7ae54bf
commit 007e8cf795

View file

@ -70,7 +70,7 @@ end section
noncomputable section noncomputable section
-- Polynomial type of degree d -- Polynomial type of degree d
@[simp] @[simp]
def PolyType (f : ) (d : ) := ∃ Poly : Polynomial , ∃ (N : ), ∀ (n : ), (N ≤ n → f n = Polynomial.eval (n : ) Poly) ∧ d = Polynomial.degree Poly def PolyType (f : ) (d : ) := ∃ Poly : Polynomial , ∃ (N : ), (∀ (n : ), N ≤ n → f n = Polynomial.eval (n : ) Poly) ∧ d = Polynomial.degree Poly
section section
-- structure PolyType (f : ) where -- structure PolyType (f : ) where
-- Poly : Polynomial -- Poly : Polynomial
@ -107,7 +107,7 @@ def f (n : ) := n
end section end section
-- (NO NEED TO PROVE) Constant polynomial function = constant function -- (NO need to prove another direction) Constant polynomial function = constant function
lemma Poly_constant (F : Polynomial ) (c : ) : lemma Poly_constant (F : Polynomial ) (c : ) :
(F = Polynomial.C (c : )) ↔ (∀ r : , (Polynomial.eval r F) = (c : )) := by (F = Polynomial.C (c : )) ↔ (∀ r : , (Polynomial.eval r F) = (c : )) := by
constructor constructor
@ -132,6 +132,8 @@ lemma Poly_shifting (f : ) (g : ) (hf : PolyType f d) (s :
-- set_option pp.all true in -- set_option pp.all true in
-- PolyType 0 = constant function -- PolyType 0 = constant function
lemma PolyType_0 (f : ) : (PolyType f 0) ↔ (∃ (c : ), ∃ (N : ), ∀ (n : ), (N ≤ n → f n = c) ∧ (c ≠ 0)) := by lemma PolyType_0 (f : ) : (PolyType f 0) ↔ (∃ (c : ), ∃ (N : ), ∀ (n : ), (N ≤ n → f n = c) ∧ (c ≠ 0)) := by
@ -139,10 +141,9 @@ lemma PolyType_0 (f : ) : (PolyType f 0) ↔ (∃ (c : ), ∃ (N :
· intro h · intro h
rcases h with ⟨Poly, hN⟩ rcases h with ⟨Poly, hN⟩
rcases hN with ⟨N, hh⟩ rcases hN with ⟨N, hh⟩
have H1 := λ n=> (hh n).left rcases hh with ⟨H1, H2⟩
have H2 := λ n=> (hh n).right -- have H1 := λ n=> (hh n).left
clear hh -- have H2 := λ n=> (hh n).right
specialize H2 (N + 1)
have this1 : Polynomial.degree Poly = 0 := by have this1 : Polynomial.degree Poly = 0 := by
have : N ≤ N + 1 := by have : N ≤ N + 1 := by
norm_num norm_num
@ -170,7 +171,6 @@ lemma PolyType_0 (f : ) : (PolyType f 0) ↔ (∃ (c : ), ∃ (N :
constructor constructor
· intro HH1 · intro HH1
-- have H6 := H1 HH1 -- have H6 := H1 HH1
--
have this3 : f n = Polynomial.eval (n : ) Poly := by have this3 : f n = Polynomial.eval (n : ) Poly := by
tauto tauto
have this4 : Polynomial.eval (n : ) Poly = c := by have this4 : Polynomial.eval (n : ) Poly = c := by
@ -179,7 +179,6 @@ lemma PolyType_0 (f : ) : (PolyType f 0) ↔ (∃ (c : ), ∃ (N :
have this5 : f n = (c : ) := by have this5 : f n = (c : ) := by
rw [←this4, this3] rw [←this4, this3]
exact Iff.mp (Rat.coe_int_inj (f n) c) this5 exact Iff.mp (Rat.coe_int_inj (f n) c) this5
--
· intro c0 · intro c0
-- have H7 := H2 (by norm_num) -- have H7 := H2 (by norm_num)
@ -189,27 +188,46 @@ lemma PolyType_0 (f : ) : (PolyType f 0) ↔ (∃ (c : ), ∃ (N :
· intro h · intro h
rcases h with ⟨c, N, aaa⟩ rcases h with ⟨c, N, hh⟩
let (Poly : Polynomial ) := Polynomial.C (c : ) let Poly := Polynomial.C (c : )
--unfold PolyType
use Poly use Poly
--simp at Poly
use N use N
intro n have H1 := λ n=> (hh n).left
specialize aaa n have H22 := λ n=> (hh n).right
have this1 : c ≠ 0 → f n = c := by have H2 : c ≠ 0 := by
tauto exact H22 0
rcases aaa with ⟨A, B⟩ clear H22
have this1 : f n = c := by
tauto
constructor constructor
clear A · intro n Nn
· have this2 : ∀ (t : ), (Polynomial.eval t Poly) = (c : ) := by specialize H1 n
rw [← Poly_constant Poly (c : )] have this : f n = c := by
sorry tauto
specialize this2 n rw [this]
rw [this2] have this2 : Polynomial.eval (n : ) Poly = (c : ) := by
tauto have this3 : ∀ r : , (Polynomial.eval r Poly) = (c : ) := (Poly_constant Poly (c : )).mp rfl
exact this3 n
exact this2.symm
· sorry · sorry
-- apply Polynomial.degree_C c -- intro n
-- specialize aaa n
-- have this1 : c ≠ 0 → f n = c := by
-- sorry
-- rcases aaa with ⟨A, B⟩
-- have this1 : f n = c := by
-- tauto
-- constructor
-- clear A
-- · have this2 : ∀ (t : ), (Polynomial.eval t Poly) = (c : ) := by
-- rw [← Poly_constant Poly (c : )]
-- sorry
-- specialize this2 n
-- rw [this2]
-- tauto
-- · sorry
@ -244,9 +262,7 @@ lemma Δ_PolyType_d_to_PolyType_0 (f : ) (d : ): PolyType f d →
intro h intro h
rcases h with ⟨Poly, hN⟩ rcases h with ⟨Poly, hN⟩
rcases hN with ⟨N, hh⟩ rcases hN with ⟨N, hh⟩
have H1 := λ n => (hh n).left rcases hh with ⟨H1, H2⟩
have H2 := λ n => (hh n).right
clear hh
have HH2 : d = Polynomial.degree Poly := by have HH2 : d = Polynomial.degree Poly := by
sorry sorry
induction' d with d hd induction' d with d hd