algebra.continued_fractions.computation.approximation_corollaries
⟷
Mathlib.Algebra.ContinuedFractions.Computation.ApproximationCorollaries
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,11 +3,11 @@ Copyright (c) 2021 Kevin Kappelmann. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Kevin Kappelmann
-/
-import Mathbin.Algebra.ContinuedFractions.Computation.Approximations
-import Mathbin.Algebra.ContinuedFractions.ConvergentsEquiv
-import Mathbin.Algebra.Order.Archimedean
-import Mathbin.Algebra.Algebra.Basic
-import Mathbin.Topology.Order.Basic
+import Algebra.ContinuedFractions.Computation.Approximations
+import Algebra.ContinuedFractions.ConvergentsEquiv
+import Algebra.Order.Archimedean
+import Algebra.Algebra.Basic
+import Topology.Order.Basic
#align_import algebra.continued_fractions.computation.approximation_corollaries from "leanprover-community/mathlib"@"2a0ce625dbb0ffbc7d1316597de0b25c1ec75303"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,11 +2,6 @@
Copyright (c) 2021 Kevin Kappelmann. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Kevin Kappelmann
-
-! This file was ported from Lean 3 source module algebra.continued_fractions.computation.approximation_corollaries
-! leanprover-community/mathlib commit 2a0ce625dbb0ffbc7d1316597de0b25c1ec75303
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Algebra.ContinuedFractions.Computation.Approximations
import Mathbin.Algebra.ContinuedFractions.ConvergentsEquiv
@@ -14,6 +9,8 @@ import Mathbin.Algebra.Order.Archimedean
import Mathbin.Algebra.Algebra.Basic
import Mathbin.Topology.Order.Basic
+#align_import algebra.continued_fractions.computation.approximation_corollaries from "leanprover-community/mathlib"@"2a0ce625dbb0ffbc7d1316597de0b25c1ec75303"
+
/-!
# Corollaries From Approximation Lemmas (`algebra.continued_fractions.computation.approximations`)
mathlib commit https://github.com/leanprover-community/mathlib/commit/2a0ce625dbb0ffbc7d1316597de0b25c1ec75303
@@ -54,32 +54,43 @@ open GeneralizedContinuedFraction (of)
open GeneralizedContinuedFraction
+#print GeneralizedContinuedFraction.of_isSimpleContinuedFraction /-
theorem GeneralizedContinuedFraction.of_isSimpleContinuedFraction :
(of v).IsSimpleContinuedFraction := fun _ _ nth_part_num_eq =>
of_part_num_eq_one nth_part_num_eq
#align generalized_continued_fraction.of_is_simple_continued_fraction GeneralizedContinuedFraction.of_isSimpleContinuedFraction
+-/
+#print SimpleContinuedFraction.of /-
/-- Creates the simple continued fraction of a value. -/
def SimpleContinuedFraction.of : SimpleContinuedFraction K :=
⟨of v, GeneralizedContinuedFraction.of_isSimpleContinuedFraction v⟩
#align simple_continued_fraction.of SimpleContinuedFraction.of
+-/
+#print SimpleContinuedFraction.of_isContinuedFraction /-
theorem SimpleContinuedFraction.of_isContinuedFraction :
(SimpleContinuedFraction.of v).IsContinuedFraction := fun _ denom nth_part_denom_eq =>
lt_of_lt_of_le zero_lt_one (of_one_le_get?_part_denom nth_part_denom_eq)
#align simple_continued_fraction.of_is_continued_fraction SimpleContinuedFraction.of_isContinuedFraction
+-/
+#print ContinuedFraction.of /-
/-- Creates the continued fraction of a value. -/
def ContinuedFraction.of : ContinuedFraction K :=
⟨SimpleContinuedFraction.of v, SimpleContinuedFraction.of_isContinuedFraction v⟩
#align continued_fraction.of ContinuedFraction.of
+-/
namespace GeneralizedContinuedFraction
+#print GeneralizedContinuedFraction.of_convergents_eq_convergents' /-
theorem of_convergents_eq_convergents' : (of v).convergents = (of v).convergents' :=
@ContinuedFraction.convergents_eq_convergents' _ _ (ContinuedFraction.of v)
#align generalized_continued_fraction.of_convergents_eq_convergents' GeneralizedContinuedFraction.of_convergents_eq_convergents'
+-/
+#print GeneralizedContinuedFraction.convergents_succ /-
/-- The recurrence relation for the `convergents` of the continued fraction expansion
of an element `v` of `K` in terms of the convergents of the inverse of its fractional part.
-/
@@ -87,6 +98,7 @@ theorem convergents_succ (n : ℕ) :
(of v).convergents (n + 1) = ⌊v⌋ + 1 / (of (Int.fract v)⁻¹).convergents n := by
rw [of_convergents_eq_convergents', convergents'_succ, of_convergents_eq_convergents']
#align generalized_continued_fraction.convergents_succ GeneralizedContinuedFraction.convergents_succ
+-/
section Convergence
@@ -101,6 +113,7 @@ variable [Archimedean K]
open Nat
+#print GeneralizedContinuedFraction.of_convergence_epsilon /-
theorem of_convergence_epsilon : ∀ ε > (0 : K), ∃ N : ℕ, ∀ n ≥ N, |v - (of v).convergents n| < ε :=
by
intro ε ε_pos
@@ -161,13 +174,16 @@ theorem of_convergence_epsilon : ∀ ε > (0 : K), ∃ N : ℕ, ∀ n ≥ N, |v
_ ≤ B * nB :=
mul_le_mul B_ineq nB_ineq (by exact_mod_cast (fib (n + 2)).zero_le) (le_of_lt zero_lt_B)
#align generalized_continued_fraction.of_convergence_epsilon GeneralizedContinuedFraction.of_convergence_epsilon
+-/
attribute [local instance] Preorder.topology
+#print GeneralizedContinuedFraction.of_convergence /-
theorem of_convergence [OrderTopology K] :
Filter.Tendsto (of v).convergents Filter.atTop <| nhds v := by
simpa [LinearOrderedAddCommGroup.tendsto_nhds, abs_sub_comm] using of_convergence_epsilon v
#align generalized_continued_fraction.of_convergence GeneralizedContinuedFraction.of_convergence
+-/
end Convergence
mathlib commit https://github.com/leanprover-community/mathlib/commit/2a0ce625dbb0ffbc7d1316597de0b25c1ec75303
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Kevin Kappelmann
! This file was ported from Lean 3 source module algebra.continued_fractions.computation.approximation_corollaries
-! leanprover-community/mathlib commit f0c8bf9245297a541f468be517f1bde6195105e9
+! leanprover-community/mathlib commit 2a0ce625dbb0ffbc7d1316597de0b25c1ec75303
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -17,6 +17,9 @@ import Mathbin.Topology.Order.Basic
/-!
# Corollaries From Approximation Lemmas (`algebra.continued_fractions.computation.approximations`)
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
## Summary
We show that the generalized_continued_fraction given by `generalized_continued_fraction.of` in fact
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -157,7 +157,6 @@ theorem of_convergence_epsilon : ∀ ε > (0 : K), ∃ N : ℕ, ∀ n ≥ N, |v
(by exact_mod_cast (fib (n + 1)).zero_le))
_ ≤ B * nB :=
mul_le_mul B_ineq nB_ineq (by exact_mod_cast (fib (n + 2)).zero_le) (le_of_lt zero_lt_B)
-
#align generalized_continued_fraction.of_convergence_epsilon GeneralizedContinuedFraction.of_convergence_epsilon
attribute [local instance] Preorder.topology
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -117,8 +117,7 @@ theorem of_convergence_epsilon : ∀ ε > (0 : K), ∃ N : ℕ, ∀ n ≥ N, |v
let nB := g.denominators (n + 1)
have abs_v_sub_conv_le : |v - g.convergents n| ≤ 1 / (B * nB) :=
abs_sub_convergents_le not_terminated_at_n
- suffices : 1 / (B * nB) < ε
- exact lt_of_le_of_lt abs_v_sub_conv_le this
+ suffices : 1 / (B * nB) < ε; exact lt_of_le_of_lt abs_v_sub_conv_le this
-- show that `0 < (B * nB)` and then multiply by `B * nB` to get rid of the division
have nB_ineq : (fib (n + 2) : K) ≤ nB :=
haveI : ¬g.terminated_at (n + 1 - 1) := not_terminated_at_n
@@ -135,8 +134,7 @@ theorem of_convergence_epsilon : ∀ ε > (0 : K), ∃ N : ℕ, ∀ n ≥ N, |v
haveI : (0 : K) < fib (n + 2) := by exact_mod_cast fib_pos (n + 1).zero_lt_succ
lt_of_lt_of_le this nB_ineq
solve_by_elim [mul_pos]
- suffices : 1 < ε * (B * nB)
- exact (div_lt_iff zero_lt_mul_conts).right this
+ suffices : 1 < ε * (B * nB); exact (div_lt_iff zero_lt_mul_conts).right this
-- use that `N ≥ n` was obtained from the archimedean property to show the following
have one_lt_ε_mul_N : 1 < ε * n :=
by
@@ -145,10 +143,9 @@ theorem of_convergence_epsilon : ∀ ε > (0 : K), ∃ N : ℕ, ∀ n ≥ N, |v
have : ε * N' ≤ ε * n :=
(mul_le_mul_left ε_pos).right (le_trans this (by exact_mod_cast n_ge_N))
exact lt_of_lt_of_le one_lt_ε_mul_N' this
- suffices : ε * n ≤ ε * (B * nB)
- exact lt_of_lt_of_le one_lt_ε_mul_N this
+ suffices : ε * n ≤ ε * (B * nB); exact lt_of_lt_of_le one_lt_ε_mul_N this
-- cancel `ε`
- suffices : (n : K) ≤ B * nB
+ suffices : (n : K) ≤ B * nB;
exact (mul_le_mul_left ε_pos).right this
show (n : K) ≤ B * nB
calc
mathlib commit https://github.com/leanprover-community/mathlib/commit/738054fa93d43512da144ec45ce799d18fd44248
@@ -4,14 +4,15 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Kevin Kappelmann
! This file was ported from Lean 3 source module algebra.continued_fractions.computation.approximation_corollaries
-! leanprover-community/mathlib commit 2738d2ca56cbc63be80c3bd48e9ed90ad94e947d
+! leanprover-community/mathlib commit f0c8bf9245297a541f468be517f1bde6195105e9
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathbin.Algebra.ContinuedFractions.Computation.Approximations
import Mathbin.Algebra.ContinuedFractions.ConvergentsEquiv
import Mathbin.Algebra.Order.Archimedean
-import Mathbin.Topology.Algebra.Order.Field
+import Mathbin.Algebra.Algebra.Basic
+import Mathbin.Topology.Order.Basic
/-!
# Corollaries From Approximation Lemmas (`algebra.continued_fractions.computation.approximations`)
mathlib commit https://github.com/leanprover-community/mathlib/commit/e05ead7993520a432bec94ac504842d90707ad63
@@ -62,7 +62,7 @@ def SimpleContinuedFraction.of : SimpleContinuedFraction K :=
theorem SimpleContinuedFraction.of_isContinuedFraction :
(SimpleContinuedFraction.of v).IsContinuedFraction := fun _ denom nth_part_denom_eq =>
- lt_of_lt_of_le zero_lt_one (of_one_le_nth_part_denom nth_part_denom_eq)
+ lt_of_lt_of_le zero_lt_one (of_one_le_get?_part_denom nth_part_denom_eq)
#align simple_continued_fraction.of_is_continued_fraction SimpleContinuedFraction.of_isContinuedFraction
/-- Creates the continued fraction of a value. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -155,8 +155,8 @@ theorem of_convergence_epsilon : ∀ ε > (0 : K), ∃ N : ℕ, ∀ n ≥ N, |v
_ ≤ fib (n + 1) := by exact_mod_cast fib_le_fib_succ
_ ≤ fib (n + 1) * fib (n + 1) := by exact_mod_cast (fib (n + 1)).le_mul_self
_ ≤ fib (n + 1) * fib (n + 2) :=
- mul_le_mul_of_nonneg_left (by exact_mod_cast fib_le_fib_succ)
- (by exact_mod_cast (fib (n + 1)).zero_le)
+ (mul_le_mul_of_nonneg_left (by exact_mod_cast fib_le_fib_succ)
+ (by exact_mod_cast (fib (n + 1)).zero_le))
_ ≤ B * nB :=
mul_le_mul B_ineq nB_ineq (by exact_mod_cast (fib (n + 2)).zero_le) (le_of_lt zero_lt_B)
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
This splits up the file Mathlib/Topology/Order/Basic.lean
(currently > 2000 lines) into several smaller files.
@@ -7,7 +7,7 @@ import Mathlib.Algebra.ContinuedFractions.Computation.Approximations
import Mathlib.Algebra.ContinuedFractions.ConvergentsEquiv
import Mathlib.Algebra.Order.Archimedean
import Mathlib.Tactic.GCongr
-import Mathlib.Topology.Order.Basic
+import Mathlib.Topology.Order.LeftRightNhds
#align_import algebra.continued_fractions.computation.approximation_corollaries from "leanprover-community/mathlib"@"f0c8bf9245297a541f468be517f1bde6195105e9"
Also fix GeneralizedContinuedFraction.of_convergence
:
it worked for the Preorder.topology
only.
@@ -45,8 +45,8 @@ convergence, fractions
variable {K : Type*} (v : K) [LinearOrderedField K] [FloorRing K]
open GeneralizedContinuedFraction (of)
-
open GeneralizedContinuedFraction
+open scoped Topology
theorem GeneralizedContinuedFraction.of_isSimpleContinuedFraction :
(of v).IsSimpleContinuedFraction := fun _ _ nth_part_num_eq =>
@@ -141,10 +141,8 @@ theorem of_convergence_epsilon :
_ ≤ B * nB := by gcongr
#align generalized_continued_fraction.of_convergence_epsilon GeneralizedContinuedFraction.of_convergence_epsilon
-attribute [local instance] Preorder.topology
-
-theorem of_convergence [OrderTopology K] :
- Filter.Tendsto (of v).convergents Filter.atTop <| nhds v := by
+theorem of_convergence [TopologicalSpace K] [OrderTopology K] :
+ Filter.Tendsto (of v).convergents Filter.atTop <| 𝓝 v := by
simpa [LinearOrderedAddCommGroup.tendsto_nhds, abs_sub_comm] using of_convergence_epsilon v
#align generalized_continued_fraction.of_convergence GeneralizedContinuedFraction.of_convergence
@@ -6,7 +6,6 @@ Authors: Kevin Kappelmann
import Mathlib.Algebra.ContinuedFractions.Computation.Approximations
import Mathlib.Algebra.ContinuedFractions.ConvergentsEquiv
import Mathlib.Algebra.Order.Archimedean
-import Mathlib.Algebra.Algebra.Basic
import Mathlib.Tactic.GCongr
import Mathlib.Topology.Order.Basic
$
with <|
(#9319)
See Zulip thread for the discussion.
@@ -123,8 +123,8 @@ theorem of_convergence_epsilon :
have B_ineq : (fib (n + 1) : K) ≤ B :=
haveI : ¬g.TerminatedAt (n - 1) := mt (terminated_stable n.pred_le) not_terminated_at_n
succ_nth_fib_le_of_nth_denom (Or.inr this)
- have zero_lt_B : 0 < B := B_ineq.trans_lt' $ mod_cast fib_pos.2 n.succ_pos
- have nB_pos : 0 < nB := nB_ineq.trans_lt' $ mod_cast fib_pos.2 $ succ_pos _
+ have zero_lt_B : 0 < B := B_ineq.trans_lt' <| mod_cast fib_pos.2 n.succ_pos
+ have nB_pos : 0 < nB := nB_ineq.trans_lt' <| mod_cast fib_pos.2 <| succ_pos _
have zero_lt_mul_conts : 0 < B * nB := by positivity
suffices 1 < ε * (B * nB) from (div_lt_iff zero_lt_mul_conts).mpr this
-- use that `N' ≥ n` was obtained from the archimedean property to show the following
@@ -99,7 +99,7 @@ open Nat
theorem of_convergence_epsilon :
∀ ε > (0 : K), ∃ N : ℕ, ∀ n ≥ N, |v - (of v).convergents n| < ε := by
intro ε ε_pos
- -- use the archimedean property to obtian a suitable N
+ -- use the archimedean property to obtain a suitable N
rcases (exists_nat_gt (1 / ε) : ∃ N' : ℕ, 1 / ε < N') with ⟨N', one_div_ε_lt_N'⟩
let N := max N' 5
-- set minimum to 5 to have N ≤ fib N work
@@ -115,7 +115,7 @@ theorem of_convergence_epsilon :
let nB := g.denominators (n + 1)
have abs_v_sub_conv_le : |v - g.convergents n| ≤ 1 / (B * nB) :=
abs_sub_convergents_le not_terminated_at_n
- suffices : 1 / (B * nB) < ε; exact lt_of_le_of_lt abs_v_sub_conv_le this
+ suffices 1 / (B * nB) < ε from lt_of_le_of_lt abs_v_sub_conv_le this
-- show that `0 < (B * nB)` and then multiply by `B * nB` to get rid of the division
have nB_ineq : (fib (n + 2) : K) ≤ nB :=
haveI : ¬g.TerminatedAt (n + 1 - 1) := not_terminated_at_n
@@ -126,10 +126,10 @@ theorem of_convergence_epsilon :
have zero_lt_B : 0 < B := B_ineq.trans_lt' $ mod_cast fib_pos.2 n.succ_pos
have nB_pos : 0 < nB := nB_ineq.trans_lt' $ mod_cast fib_pos.2 $ succ_pos _
have zero_lt_mul_conts : 0 < B * nB := by positivity
- suffices : 1 < ε * (B * nB); exact (div_lt_iff zero_lt_mul_conts).mpr this
- -- use that `N ≥ n` was obtained from the archimedean property to show the following
+ suffices 1 < ε * (B * nB) from (div_lt_iff zero_lt_mul_conts).mpr this
+ -- use that `N' ≥ n` was obtained from the archimedean property to show the following
calc 1 < ε * (N' : K) := (div_lt_iff' ε_pos).mp one_div_ε_lt_N'
- _ ≤ ε * (B * nB) := ?_
+ _ ≤ ε * (B * nB) := ?_
-- cancel `ε`
gcongr
calc
Following on from previous gcongr
golfing PRs #4702 and #4784.
This is a replacement for #7901: this round of golfs, first introduced there, there exposed some performance issues in gcongr
, hopefully fixed by #8731, and I am opening a new PR so that the performance can be checked against current master rather than master at the time of #7901.
@@ -7,6 +7,7 @@ import Mathlib.Algebra.ContinuedFractions.Computation.Approximations
import Mathlib.Algebra.ContinuedFractions.ConvergentsEquiv
import Mathlib.Algebra.Order.Archimedean
import Mathlib.Algebra.Algebra.Basic
+import Mathlib.Tactic.GCongr
import Mathlib.Topology.Order.Basic
#align_import algebra.continued_fractions.computation.approximation_corollaries from "leanprover-community/mathlib"@"f0c8bf9245297a541f468be517f1bde6195105e9"
@@ -127,24 +128,18 @@ theorem of_convergence_epsilon :
have zero_lt_mul_conts : 0 < B * nB := by positivity
suffices : 1 < ε * (B * nB); exact (div_lt_iff zero_lt_mul_conts).mpr this
-- use that `N ≥ n` was obtained from the archimedean property to show the following
- have one_lt_ε_mul_N : 1 < ε * n := by
- have one_lt_ε_mul_N' : 1 < ε * (N' : K) := (div_lt_iff' ε_pos).mp one_div_ε_lt_N'
- have : (N' : K) ≤ N := mod_cast le_max_left _ _
- have : ε * N' ≤ ε * n :=
- (mul_le_mul_left ε_pos).mpr (le_trans this (mod_cast n_ge_N))
- exact lt_of_lt_of_le one_lt_ε_mul_N' this
- suffices : ε * n ≤ ε * (B * nB); exact lt_of_lt_of_le one_lt_ε_mul_N this
+ calc 1 < ε * (N' : K) := (div_lt_iff' ε_pos).mp one_div_ε_lt_N'
+ _ ≤ ε * (B * nB) := ?_
-- cancel `ε`
- suffices : (n : K) ≤ B * nB;
- exact (mul_le_mul_left ε_pos).mpr this
- show (n : K) ≤ B * nB
+ gcongr
calc
- (n : K) ≤ fib n := mod_cast le_fib_self <| le_trans (le_max_right N' 5) n_ge_N
- _ ≤ fib (n + 1) := mod_cast fib_le_fib_succ
- _ ≤ fib (n + 1) * fib (n + 1) := mod_cast (fib (n + 1)).le_mul_self
- _ ≤ fib (n + 1) * fib (n + 2) :=
- mul_le_mul_of_nonneg_left (mod_cast fib_le_fib_succ) (cast_nonneg _)
- _ ≤ B * nB := mul_le_mul B_ineq nB_ineq (cast_nonneg _) zero_lt_B.le
+ (N' : K) ≤ (N : K) := by exact_mod_cast le_max_left _ _
+ _ ≤ n := by exact_mod_cast n_ge_N
+ _ ≤ fib n := by exact_mod_cast le_fib_self <| le_trans (le_max_right N' 5) n_ge_N
+ _ ≤ fib (n + 1) := by exact_mod_cast fib_le_fib_succ
+ _ ≤ fib (n + 1) * fib (n + 1) := by exact_mod_cast (fib (n + 1)).le_mul_self
+ _ ≤ fib (n + 1) * fib (n + 2) := by gcongr; exact_mod_cast fib_le_fib_succ
+ _ ≤ B * nB := by gcongr
#align generalized_continued_fraction.of_convergence_epsilon GeneralizedContinuedFraction.of_convergence_epsilon
attribute [local instance] Preorder.topology
exact_mod_cast
tactic with mod_cast
elaborator where possible (#8404)
We still have the exact_mod_cast
tactic, used in a few places, which somehow (?) works a little bit harder to prevent the expected type influencing the elaboration of the term. I would like to get to the bottom of this, and it will be easier once the only usages of exact_mod_cast
are the ones that don't work using the term elaborator by itself.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -109,7 +109,7 @@ theorem of_convergence_epsilon :
· have : v = g.convergents n := of_correctness_of_terminatedAt terminated_at_n
have : v - g.convergents n = 0 := sub_eq_zero.mpr this
rw [this]
- exact_mod_cast ε_pos
+ exact mod_cast ε_pos
· let B := g.denominators n
let nB := g.denominators (n + 1)
have abs_v_sub_conv_le : |v - g.convergents n| ≤ 1 / (B * nB) :=
@@ -122,16 +122,16 @@ theorem of_convergence_epsilon :
have B_ineq : (fib (n + 1) : K) ≤ B :=
haveI : ¬g.TerminatedAt (n - 1) := mt (terminated_stable n.pred_le) not_terminated_at_n
succ_nth_fib_le_of_nth_denom (Or.inr this)
- have zero_lt_B : 0 < B := B_ineq.trans_lt' $ by exact_mod_cast fib_pos.2 n.succ_pos
- have nB_pos : 0 < nB := nB_ineq.trans_lt' $ by exact_mod_cast fib_pos.2 $ succ_pos _
+ have zero_lt_B : 0 < B := B_ineq.trans_lt' $ mod_cast fib_pos.2 n.succ_pos
+ have nB_pos : 0 < nB := nB_ineq.trans_lt' $ mod_cast fib_pos.2 $ succ_pos _
have zero_lt_mul_conts : 0 < B * nB := by positivity
suffices : 1 < ε * (B * nB); exact (div_lt_iff zero_lt_mul_conts).mpr this
-- use that `N ≥ n` was obtained from the archimedean property to show the following
have one_lt_ε_mul_N : 1 < ε * n := by
have one_lt_ε_mul_N' : 1 < ε * (N' : K) := (div_lt_iff' ε_pos).mp one_div_ε_lt_N'
- have : (N' : K) ≤ N := by exact_mod_cast le_max_left _ _
+ have : (N' : K) ≤ N := mod_cast le_max_left _ _
have : ε * N' ≤ ε * n :=
- (mul_le_mul_left ε_pos).mpr (le_trans this (by exact_mod_cast n_ge_N))
+ (mul_le_mul_left ε_pos).mpr (le_trans this (mod_cast n_ge_N))
exact lt_of_lt_of_le one_lt_ε_mul_N' this
suffices : ε * n ≤ ε * (B * nB); exact lt_of_lt_of_le one_lt_ε_mul_N this
-- cancel `ε`
@@ -139,11 +139,11 @@ theorem of_convergence_epsilon :
exact (mul_le_mul_left ε_pos).mpr this
show (n : K) ≤ B * nB
calc
- (n : K) ≤ fib n := by exact_mod_cast le_fib_self <| le_trans (le_max_right N' 5) n_ge_N
- _ ≤ fib (n + 1) := by exact_mod_cast fib_le_fib_succ
- _ ≤ fib (n + 1) * fib (n + 1) := by exact_mod_cast (fib (n + 1)).le_mul_self
+ (n : K) ≤ fib n := mod_cast le_fib_self <| le_trans (le_max_right N' 5) n_ge_N
+ _ ≤ fib (n + 1) := mod_cast fib_le_fib_succ
+ _ ≤ fib (n + 1) * fib (n + 1) := mod_cast (fib (n + 1)).le_mul_self
_ ≤ fib (n + 1) * fib (n + 2) :=
- mul_le_mul_of_nonneg_left (by exact_mod_cast fib_le_fib_succ) (cast_nonneg _)
+ mul_le_mul_of_nonneg_left (mod_cast fib_le_fib_succ) (cast_nonneg _)
_ ≤ B * nB := mul_le_mul B_ineq nB_ineq (cast_nonneg _) zero_lt_B.le
#align generalized_continued_fraction.of_convergence_epsilon GeneralizedContinuedFraction.of_convergence_epsilon
rcases
, convert
and congrm
(#7725)
Replace rcases(
with rcases (
. Same thing for convert(
and congrm(
. No other change.
@@ -99,7 +99,7 @@ theorem of_convergence_epsilon :
∀ ε > (0 : K), ∃ N : ℕ, ∀ n ≥ N, |v - (of v).convergents n| < ε := by
intro ε ε_pos
-- use the archimedean property to obtian a suitable N
- rcases(exists_nat_gt (1 / ε) : ∃ N' : ℕ, 1 / ε < N') with ⟨N', one_div_ε_lt_N'⟩
+ rcases (exists_nat_gt (1 / ε) : ∃ N' : ℕ, 1 / ε < N') with ⟨N', one_div_ε_lt_N'⟩
let N := max N' 5
-- set minimum to 5 to have N ≤ fib N work
exists N
Prove Zeckendorf's theorem: Every natural number can be written uniquely as a sum of distinct non-consecutive Fibonacci numbers.
Instead of proving an ExistsUnique
statement, I define an equivalence between natural numbers and Zeckendorf representations.
Co-authored-by: Ruben Van de Velde <65514131+Ruben-VandeVelde@users.noreply.github.com>
@@ -122,14 +122,9 @@ theorem of_convergence_epsilon :
have B_ineq : (fib (n + 1) : K) ≤ B :=
haveI : ¬g.TerminatedAt (n - 1) := mt (terminated_stable n.pred_le) not_terminated_at_n
succ_nth_fib_le_of_nth_denom (Or.inr this)
- have zero_lt_B : 0 < B :=
- haveI : (0 : K) < fib (n + 1) := by exact_mod_cast fib_pos n.zero_lt_succ
- lt_of_lt_of_le this B_ineq
- have zero_lt_mul_conts : 0 < B * nB := by
- have : 0 < nB :=
- haveI : (0 : K) < fib (n + 2) := by exact_mod_cast fib_pos (n + 1).zero_lt_succ
- lt_of_lt_of_le this nB_ineq
- solve_by_elim [mul_pos]
+ have zero_lt_B : 0 < B := B_ineq.trans_lt' $ by exact_mod_cast fib_pos.2 n.succ_pos
+ have nB_pos : 0 < nB := nB_ineq.trans_lt' $ by exact_mod_cast fib_pos.2 $ succ_pos _
+ have zero_lt_mul_conts : 0 < B * nB := by positivity
suffices : 1 < ε * (B * nB); exact (div_lt_iff zero_lt_mul_conts).mpr this
-- use that `N ≥ n` was obtained from the archimedean property to show the following
have one_lt_ε_mul_N : 1 < ε * n := by
@@ -148,10 +143,8 @@ theorem of_convergence_epsilon :
_ ≤ fib (n + 1) := by exact_mod_cast fib_le_fib_succ
_ ≤ fib (n + 1) * fib (n + 1) := by exact_mod_cast (fib (n + 1)).le_mul_self
_ ≤ fib (n + 1) * fib (n + 2) :=
- (mul_le_mul_of_nonneg_left (by exact_mod_cast fib_le_fib_succ)
- (by exact_mod_cast (fib (n + 1)).zero_le))
- _ ≤ B * nB :=
- mul_le_mul B_ineq nB_ineq (by exact_mod_cast (fib (n + 2)).zero_le) (le_of_lt zero_lt_B)
+ mul_le_mul_of_nonneg_left (by exact_mod_cast fib_le_fib_succ) (cast_nonneg _)
+ _ ≤ B * nB := mul_le_mul B_ineq nB_ineq (cast_nonneg _) zero_lt_B.le
#align generalized_continued_fraction.of_convergence_epsilon GeneralizedContinuedFraction.of_convergence_epsilon
attribute [local instance] Preorder.topology
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -42,7 +42,7 @@ convergence, fractions
-/
-variable {K : Type _} (v : K) [LinearOrderedField K] [FloorRing K]
+variable {K : Type*} (v : K) [LinearOrderedField K] [FloorRing K]
open GeneralizedContinuedFraction (of)
@@ -2,11 +2,6 @@
Copyright (c) 2021 Kevin Kappelmann. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Kevin Kappelmann
-
-! This file was ported from Lean 3 source module algebra.continued_fractions.computation.approximation_corollaries
-! leanprover-community/mathlib commit f0c8bf9245297a541f468be517f1bde6195105e9
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Algebra.ContinuedFractions.Computation.Approximations
import Mathlib.Algebra.ContinuedFractions.ConvergentsEquiv
@@ -14,6 +9,8 @@ import Mathlib.Algebra.Order.Archimedean
import Mathlib.Algebra.Algebra.Basic
import Mathlib.Topology.Order.Basic
+#align_import algebra.continued_fractions.computation.approximation_corollaries from "leanprover-community/mathlib"@"f0c8bf9245297a541f468be517f1bde6195105e9"
+
/-!
# Corollaries From Approximation Lemmas (`Algebra.ContinuedFractions.Computation.Approximations`)
The unported dependencies are