7. Rational Versions
-
RationalApprox.sinℚ[complete] -
RationalApprox.cosℚ[complete]
Define \ssin, \scos : \mathbb{R} \to \mathbb{R} by truncated Taylor series:
-
\ssin(x) := x-\frac{x^3}{3!}+\frac{x^5}{5!}\mp\dots+\frac{x^{25}}{25!} -
\scos(x) := 1-\frac{x^2}{2!}+\frac{x^4}{4!}\mp\dots+\frac{x^{24}}{24!}
Replacing \sin,\cos with \ssin,\scos defines
R_\mathbb{Q}(\alpha), R'_\mathbb{Q}(\alpha), X_\mathbb{Q}(\theta,\phi), M_\mathbb{Q}(\theta,\phi), M^\theta_\mathbb{Q}(\theta,\varphi), M^\phi_\mathbb{Q}(\theta,\varphi).
Lean code for Definition7.1●2 definitions
Associated Lean declarations
-
RationalApprox.sinℚ[complete]
-
RationalApprox.cosℚ[complete]
-
RationalApprox.sinℚ[complete] -
RationalApprox.cosℚ[complete]
-
defdefined in Noperthedron/RationalApprox/Basic.leancomplete
def RationalApprox.sinℚ
RationalApprox.sinℚ {k : Type} [Field k] (x : k) : kSine partial sum $x - x^3/3! + x^5/5! - ⋯ + x^{25}/25!${kType: TypeA type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements. An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`. Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself). See also note [forgetful inheritance]. If the field has positive characteristic `p`, our division by zero convention forces `ratCast (1 / p) = 1 / 0 = 0`.kType] (xk: kType) : kTypedef RationalApprox.sinℚ
RationalApprox.sinℚ {k : Type} [Field k] (x : k) : kSine partial sum $x - x^3/3! + x^5/5! - ⋯ + x^{25}/25!${kType: TypeA type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements. An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`. Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself). See also note [forgetful inheritance]. If the field has positive characteristic `p`, our division by zero convention forces `ratCast (1 / p) = 1 / 0 = 0`.kType] (xk: kType) : kTypeSine partial sum $x - x^3/3! + x^5/5! - ⋯ + x^{25}/25!$ -
defdefined in Noperthedron/RationalApprox/Basic.leancomplete
def RationalApprox.cosℚ
RationalApprox.cosℚ {k : Type} [Field k] (x : k) : kCosine partial sum $1 - x^2/2! + x^4/4! - ⋯ + x^{24}/24!${kType: TypeA type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements. An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`. Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself). See also note [forgetful inheritance]. If the field has positive characteristic `p`, our division by zero convention forces `ratCast (1 / p) = 1 / 0 = 0`.kType] (xk: kType) : kTypedef RationalApprox.cosℚ
RationalApprox.cosℚ {k : Type} [Field k] (x : k) : kCosine partial sum $1 - x^2/2! + x^4/4! - ⋯ + x^{24}/24!${kType: TypeA type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements. An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`. Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself). See also note [forgetful inheritance]. If the field has positive characteristic `p`, our division by zero convention forces `ratCast (1 / p) = 1 / 0 = 0`.kType] (xk: kType) : kTypeCosine partial sum $1 - x^2/2! + x^4/4! - ⋯ + x^{24}/24!$
-
RationalApprox.sinℚ_approx[complete] -
RationalApprox.cosℚ_approx[complete]
Using Definition 7.1.
|\ssin(x)-\sin(x)|\leq \frac{|x|^{27}}{27!}
\qquad\text{and}\qquad
|\scos(x)-\cos(x)|\leq \frac{|x|^{26}}{26!}.
Lean code for Lemma7.2●2 theorems
Associated Lean declarations
-
RationalApprox.sinℚ_approx[complete]
-
RationalApprox.cosℚ_approx[complete]
-
RationalApprox.sinℚ_approx[complete] -
RationalApprox.cosℚ_approx[complete]
-
theoremdefined in Noperthedron/RationalApprox/TrigLemmas.leancomplete
theorem RationalApprox.sinℚ_approx
RationalApprox.sinℚ_approx (x : ℝ) : |Real.sin x - RationalApprox.sinℚ x| ≤ |x| ^ 27 / ↑(Nat.factorial 27)(xℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.) : |abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`Real.sinReal.sin (x : ℝ) : ℝThe real sine function, defined as the real part of the complex sinexℝ-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).RationalApprox.sinℚRationalApprox.sinℚ {k : Type} [Field k] (x : k) : kSine partial sum $x - x^3/3! + x^5/5! - ⋯ + x^{25}/25!$xℝ|abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.|abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`xℝ|abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`^HPow.hPow.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HPow α β γ] : α → β → γ`a ^ b` computes `a` to the power of `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `^` in identifiers is `pow`.27 /HDiv.hDiv.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HDiv α β γ] : α → β → γ`a / b` computes the result of dividing `a` by `b`. The meaning of this notation is type-dependent. * For most types like `Nat`, `Int`, `Rat`, `Real`, `a / 0` is defined to be `0`. * For `Nat`, `a / b` rounds downwards. * For `Int`, `a / b` rounds downwards if `b` is positive or upwards if `b` is negative. It is implemented as `Int.ediv`, the unique function satisfying `a % b + b * (a / b) = a` and `0 ≤ a % b < natAbs b` for `b ≠ 0`. Other rounding conventions are available using the functions `Int.fdiv` (floor rounding) and `Int.tdiv` (truncation rounding). * For `Float`, `a / 0` follows the IEEE 754 semantics for division, usually resulting in `inf` or `nan`. Conventions for notations in identifiers: * The recommended spelling of `/` in identifiers is `div`.↑(Nat.factorialNat.factorial : ℕ → ℕ`Nat.factorial n` is the factorial of `n`.27)theorem RationalApprox.sinℚ_approx
RationalApprox.sinℚ_approx (x : ℝ) : |Real.sin x - RationalApprox.sinℚ x| ≤ |x| ^ 27 / ↑(Nat.factorial 27)(xℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.) : |abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`Real.sinReal.sin (x : ℝ) : ℝThe real sine function, defined as the real part of the complex sinexℝ-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).RationalApprox.sinℚRationalApprox.sinℚ {k : Type} [Field k] (x : k) : kSine partial sum $x - x^3/3! + x^5/5! - ⋯ + x^{25}/25!$xℝ|abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.|abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`xℝ|abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`^HPow.hPow.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HPow α β γ] : α → β → γ`a ^ b` computes `a` to the power of `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `^` in identifiers is `pow`.27 /HDiv.hDiv.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HDiv α β γ] : α → β → γ`a / b` computes the result of dividing `a` by `b`. The meaning of this notation is type-dependent. * For most types like `Nat`, `Int`, `Rat`, `Real`, `a / 0` is defined to be `0`. * For `Nat`, `a / b` rounds downwards. * For `Int`, `a / b` rounds downwards if `b` is positive or upwards if `b` is negative. It is implemented as `Int.ediv`, the unique function satisfying `a % b + b * (a / b) = a` and `0 ≤ a % b < natAbs b` for `b ≠ 0`. Other rounding conventions are available using the functions `Int.fdiv` (floor rounding) and `Int.tdiv` (truncation rounding). * For `Float`, `a / 0` follows the IEEE 754 semantics for division, usually resulting in `inf` or `nan`. Conventions for notations in identifiers: * The recommended spelling of `/` in identifiers is `div`.↑(Nat.factorialNat.factorial : ℕ → ℕ`Nat.factorial n` is the factorial of `n`.27) -
theoremdefined in Noperthedron/RationalApprox/TrigLemmas.leancomplete
theorem RationalApprox.cosℚ_approx
RationalApprox.cosℚ_approx (x : ℝ) : |Real.cos x - RationalApprox.cosℚ x| ≤ |x| ^ 26 / ↑(Nat.factorial 26)(xℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.) : |abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`Real.cosReal.cos (x : ℝ) : ℝThe real cosine function, defined as the real part of the complex cosinexℝ-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).RationalApprox.cosℚRationalApprox.cosℚ {k : Type} [Field k] (x : k) : kCosine partial sum $1 - x^2/2! + x^4/4! - ⋯ + x^{24}/24!$xℝ|abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.|abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`xℝ|abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`^HPow.hPow.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HPow α β γ] : α → β → γ`a ^ b` computes `a` to the power of `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `^` in identifiers is `pow`.26 /HDiv.hDiv.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HDiv α β γ] : α → β → γ`a / b` computes the result of dividing `a` by `b`. The meaning of this notation is type-dependent. * For most types like `Nat`, `Int`, `Rat`, `Real`, `a / 0` is defined to be `0`. * For `Nat`, `a / b` rounds downwards. * For `Int`, `a / b` rounds downwards if `b` is positive or upwards if `b` is negative. It is implemented as `Int.ediv`, the unique function satisfying `a % b + b * (a / b) = a` and `0 ≤ a % b < natAbs b` for `b ≠ 0`. Other rounding conventions are available using the functions `Int.fdiv` (floor rounding) and `Int.tdiv` (truncation rounding). * For `Float`, `a / 0` follows the IEEE 754 semantics for division, usually resulting in `inf` or `nan`. Conventions for notations in identifiers: * The recommended spelling of `/` in identifiers is `div`.↑(Nat.factorialNat.factorial : ℕ → ℕ`Nat.factorial n` is the factorial of `n`.26)theorem RationalApprox.cosℚ_approx
RationalApprox.cosℚ_approx (x : ℝ) : |Real.cos x - RationalApprox.cosℚ x| ≤ |x| ^ 26 / ↑(Nat.factorial 26)(xℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.) : |abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`Real.cosReal.cos (x : ℝ) : ℝThe real cosine function, defined as the real part of the complex cosinexℝ-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).RationalApprox.cosℚRationalApprox.cosℚ {k : Type} [Field k] (x : k) : kCosine partial sum $1 - x^2/2! + x^4/4! - ⋯ + x^{24}/24!$xℝ|abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.|abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`xℝ|abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`^HPow.hPow.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HPow α β γ] : α → β → γ`a ^ b` computes `a` to the power of `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `^` in identifiers is `pow`.26 /HDiv.hDiv.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HDiv α β γ] : α → β → γ`a / b` computes the result of dividing `a` by `b`. The meaning of this notation is type-dependent. * For most types like `Nat`, `Int`, `Rat`, `Real`, `a / 0` is defined to be `0`. * For `Nat`, `a / b` rounds downwards. * For `Int`, `a / b` rounds downwards if `b` is positive or upwards if `b` is negative. It is implemented as `Int.ediv`, the unique function satisfying `a % b + b * (a / b) = a` and `0 ≤ a % b < natAbs b` for `b ≠ 0`. Other rounding conventions are available using the functions `Int.fdiv` (floor rounding) and `Int.tdiv` (truncation rounding). * For `Float`, `a / 0` follows the IEEE 754 semantics for division, usually resulting in `inf` or `nan`. Conventions for notations in identifiers: * The recommended spelling of `/` in identifiers is `div`.↑(Nat.factorialNat.factorial : ℕ → ℕ`Nat.factorial n` is the factorial of `n`.26)
Appeal to Taylor series bounds, using the fact that all absolute values of higher derivatives of sine and cosine never exceed 1.
-
RationalApprox.sinℚ_approx'[complete] -
RationalApprox.cosℚ_approx'[complete]
For every x\in [-4,4],
|\ssin(x)-\sin(x)| \leq \kappa/7 and |\scos(x)-\cos(x)|\leq \kappa/7.
Lean code for Lemma7.3●2 theorems
Associated Lean declarations
-
RationalApprox.sinℚ_approx'[complete]
-
RationalApprox.cosℚ_approx'[complete]
-
RationalApprox.sinℚ_approx'[complete] -
RationalApprox.cosℚ_approx'[complete]
-
theoremdefined in Noperthedron/RationalApprox/TrigLemmas.leancomplete
theorem RationalApprox.sinℚ_approx'
RationalApprox.sinℚ_approx' (x : ℝ) (hx : x ∈ Set.Icc (-4) 4) : |Real.sin x - RationalApprox.sinℚ x| ≤ RationalApprox.κ / 7(xℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.) (hxx ∈ Set.Icc (-4) 4: xℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) : |abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`Real.sinReal.sin (x : ℝ) : ℝThe real sine function, defined as the real part of the complex sinexℝ-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).RationalApprox.sinℚRationalApprox.sinℚ {k : Type} [Field k] (x : k) : kSine partial sum $x - x^3/3! + x^5/5! - ⋯ + x^{25}/25!$xℝ|abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ/HDiv.hDiv.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HDiv α β γ] : α → β → γ`a / b` computes the result of dividing `a` by `b`. The meaning of this notation is type-dependent. * For most types like `Nat`, `Int`, `Rat`, `Real`, `a / 0` is defined to be `0`. * For `Nat`, `a / b` rounds downwards. * For `Int`, `a / b` rounds downwards if `b` is positive or upwards if `b` is negative. It is implemented as `Int.ediv`, the unique function satisfying `a % b + b * (a / b) = a` and `0 ≤ a % b < natAbs b` for `b ≠ 0`. Other rounding conventions are available using the functions `Int.fdiv` (floor rounding) and `Int.tdiv` (truncation rounding). * For `Float`, `a / 0` follows the IEEE 754 semantics for division, usually resulting in `inf` or `nan`. Conventions for notations in identifiers: * The recommended spelling of `/` in identifiers is `div`.7theorem RationalApprox.sinℚ_approx'
RationalApprox.sinℚ_approx' (x : ℝ) (hx : x ∈ Set.Icc (-4) 4) : |Real.sin x - RationalApprox.sinℚ x| ≤ RationalApprox.κ / 7(xℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.) (hxx ∈ Set.Icc (-4) 4: xℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) : |abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`Real.sinReal.sin (x : ℝ) : ℝThe real sine function, defined as the real part of the complex sinexℝ-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).RationalApprox.sinℚRationalApprox.sinℚ {k : Type} [Field k] (x : k) : kSine partial sum $x - x^3/3! + x^5/5! - ⋯ + x^{25}/25!$xℝ|abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ/HDiv.hDiv.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HDiv α β γ] : α → β → γ`a / b` computes the result of dividing `a` by `b`. The meaning of this notation is type-dependent. * For most types like `Nat`, `Int`, `Rat`, `Real`, `a / 0` is defined to be `0`. * For `Nat`, `a / b` rounds downwards. * For `Int`, `a / b` rounds downwards if `b` is positive or upwards if `b` is negative. It is implemented as `Int.ediv`, the unique function satisfying `a % b + b * (a / b) = a` and `0 ≤ a % b < natAbs b` for `b ≠ 0`. Other rounding conventions are available using the functions `Int.fdiv` (floor rounding) and `Int.tdiv` (truncation rounding). * For `Float`, `a / 0` follows the IEEE 754 semantics for division, usually resulting in `inf` or `nan`. Conventions for notations in identifiers: * The recommended spelling of `/` in identifiers is `div`.7 -
theoremdefined in Noperthedron/RationalApprox/TrigLemmas.leancomplete
theorem RationalApprox.cosℚ_approx'
RationalApprox.cosℚ_approx' (x : ℝ) (hx : x ∈ Set.Icc (-4) 4) : |Real.cos x - RationalApprox.cosℚ x| ≤ RationalApprox.κ / 7(xℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.) (hxx ∈ Set.Icc (-4) 4: xℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) : |abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`Real.cosReal.cos (x : ℝ) : ℝThe real cosine function, defined as the real part of the complex cosinexℝ-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).RationalApprox.cosℚRationalApprox.cosℚ {k : Type} [Field k] (x : k) : kCosine partial sum $1 - x^2/2! + x^4/4! - ⋯ + x^{24}/24!$xℝ|abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ/HDiv.hDiv.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HDiv α β γ] : α → β → γ`a / b` computes the result of dividing `a` by `b`. The meaning of this notation is type-dependent. * For most types like `Nat`, `Int`, `Rat`, `Real`, `a / 0` is defined to be `0`. * For `Nat`, `a / b` rounds downwards. * For `Int`, `a / b` rounds downwards if `b` is positive or upwards if `b` is negative. It is implemented as `Int.ediv`, the unique function satisfying `a % b + b * (a / b) = a` and `0 ≤ a % b < natAbs b` for `b ≠ 0`. Other rounding conventions are available using the functions `Int.fdiv` (floor rounding) and `Int.tdiv` (truncation rounding). * For `Float`, `a / 0` follows the IEEE 754 semantics for division, usually resulting in `inf` or `nan`. Conventions for notations in identifiers: * The recommended spelling of `/` in identifiers is `div`.7theorem RationalApprox.cosℚ_approx'
RationalApprox.cosℚ_approx' (x : ℝ) (hx : x ∈ Set.Icc (-4) 4) : |Real.cos x - RationalApprox.cosℚ x| ≤ RationalApprox.κ / 7(xℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.) (hxx ∈ Set.Icc (-4) 4: xℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) : |abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`Real.cosReal.cos (x : ℝ) : ℝThe real cosine function, defined as the real part of the complex cosinexℝ-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).RationalApprox.cosℚRationalApprox.cosℚ {k : Type} [Field k] (x : k) : kCosine partial sum $1 - x^2/2! + x^4/4! - ⋯ + x^{24}/24!$xℝ|abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ/HDiv.hDiv.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HDiv α β γ] : α → β → γ`a / b` computes the result of dividing `a` by `b`. The meaning of this notation is type-dependent. * For most types like `Nat`, `Int`, `Rat`, `Real`, `a / 0` is defined to be `0`. * For `Nat`, `a / b` rounds downwards. * For `Int`, `a / b` rounds downwards if `b` is positive or upwards if `b` is negative. It is implemented as `Int.ediv`, the unique function satisfying `a % b + b * (a / b) = a` and `0 ≤ a % b < natAbs b` for `b ≠ 0`. Other rounding conventions are available using the functions `Int.fdiv` (floor rounding) and `Int.tdiv` (truncation rounding). * For `Float`, `a / 0` follows the IEEE 754 semantics for division, usually resulting in `inf` or `nan`. Conventions for notations in identifiers: * The recommended spelling of `/` in identifiers is `div`.7
-
RationalApprox.norm_le_delta_sqrt_dims[complete]
Let A = (a_{i,j})_{1 \leq i \leq m,\,1 \leq j \leq n} \in \mathbb{R}^{m \times n} and \delta >0.
If |a_{i,j}| \leq \delta for all entries, then \|A\| \leq \delta \sqrt{mn}.
Lean code for Lemma7.4●1 theorem
Associated Lean declarations
-
RationalApprox.norm_le_delta_sqrt_dims[complete]
-
RationalApprox.norm_le_delta_sqrt_dims[complete]
-
theoremdefined in Noperthedron/RationalApprox/Lemma39.leancomplete
theorem RationalApprox.norm_le_delta_sqrt_dims
RationalApprox.norm_le_delta_sqrt_dims {m n : ℕ} {δ : ℝ} (A : Matrix (Fin m) (Fin n) ℝ) (hδ : 0 < δ) (hle : ∀ (i : Fin m) (j : Fin n), |A i j| ≤ δ) : ‖LinearMap.toContinuousLinearMap (Matrix.toEuclideanLin A)‖ ≤ δ * √(↑m * ↑n)[SY25] Lemma 39{mℕnℕ: ℕNat : TypeThe natural numbers, starting at zero. This type is special-cased by both the kernel and the compiler, and overridden with an efficient implementation. Both use a fast arbitrary-precision arithmetic library (usually [GMP](https://gmplib.org/)); at runtime, `Nat` values that are sufficiently small are unboxed.} {δℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.} (AMatrix (Fin m) (Fin n) ℝ: MatrixMatrix.{u, u', v} (m : Type u) (n : Type u') (α : Type v) : Type (max u u' v)`Matrix m n R` is the type of matrices with entries in `R`, whose rows are indexed by `m` and whose columns are indexed by `n`.(FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.mℕ) (FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.nℕ) ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.) (hδ0 < δ: 0 <LT.lt.{u} {α : Type u} [self : LT α] : α → α → PropThe less-than relation: `x < y` Conventions for notations in identifiers: * The recommended spelling of `<` in identifiers is `lt`.δℝ) (hle∀ (i : Fin m) (j : Fin n), |A i j| ≤ δ: ∀ (iFin m: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.mℕ) (jFin n: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.nℕ), |abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`AMatrix (Fin m) (Fin n) ℝiFin mjFin n|abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.δℝ) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.LinearMap.toContinuousLinearMapLinearMap.toContinuousLinearMap.{u, v, x} {𝕜 : Type u} [hnorm : NontriviallyNormedField 𝕜] {E : Type v} [AddCommGroup E] [Module 𝕜 E] [TopologicalSpace E] [IsTopologicalAddGroup E] [ContinuousSMul 𝕜 E] {F' : Type x} [AddCommGroup F'] [Module 𝕜 F'] [TopologicalSpace F'] [IsTopologicalAddGroup F'] [ContinuousSMul 𝕜 F'] [CompleteSpace 𝕜] [T2Space E] [FiniteDimensional 𝕜 E] : (E →ₗ[𝕜] F') ≃ₗ[𝕜] E →L[𝕜] F'The continuous linear map induced by a linear map on a finite-dimensional space(Matrix.toEuclideanLinMatrix.toEuclideanLin.{u_3, u_7, u_8} {𝕜 : Type u_3} [RCLike 𝕜] {m : Type u_7} {n : Type u_8} [Fintype n] [DecidableEq n] : Matrix m n 𝕜 ≃ₗ[𝕜] EuclideanSpace 𝕜 n →ₗ[𝕜] EuclideanSpace 𝕜 mA shorthand for `Matrix.toLpLin 2 2`.AMatrix (Fin m) (Fin n) ℝ)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.δℝ*HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.√Real.sqrt (x : ℝ) : ℝThe square root of a real number. This returns 0 for negative inputs. This has notation `√x`. Note that `√x⁻¹` is parsed as `√(x⁻¹)`.(HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.↑mℕ*HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.↑nℕ)HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.theorem RationalApprox.norm_le_delta_sqrt_dims
RationalApprox.norm_le_delta_sqrt_dims {m n : ℕ} {δ : ℝ} (A : Matrix (Fin m) (Fin n) ℝ) (hδ : 0 < δ) (hle : ∀ (i : Fin m) (j : Fin n), |A i j| ≤ δ) : ‖LinearMap.toContinuousLinearMap (Matrix.toEuclideanLin A)‖ ≤ δ * √(↑m * ↑n)[SY25] Lemma 39{mℕnℕ: ℕNat : TypeThe natural numbers, starting at zero. This type is special-cased by both the kernel and the compiler, and overridden with an efficient implementation. Both use a fast arbitrary-precision arithmetic library (usually [GMP](https://gmplib.org/)); at runtime, `Nat` values that are sufficiently small are unboxed.} {δℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.} (AMatrix (Fin m) (Fin n) ℝ: MatrixMatrix.{u, u', v} (m : Type u) (n : Type u') (α : Type v) : Type (max u u' v)`Matrix m n R` is the type of matrices with entries in `R`, whose rows are indexed by `m` and whose columns are indexed by `n`.(FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.mℕ) (FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.nℕ) ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.) (hδ0 < δ: 0 <LT.lt.{u} {α : Type u} [self : LT α] : α → α → PropThe less-than relation: `x < y` Conventions for notations in identifiers: * The recommended spelling of `<` in identifiers is `lt`.δℝ) (hle∀ (i : Fin m) (j : Fin n), |A i j| ≤ δ: ∀ (iFin m: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.mℕ) (jFin n: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.nℕ), |abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`AMatrix (Fin m) (Fin n) ℝiFin mjFin n|abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.δℝ) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.LinearMap.toContinuousLinearMapLinearMap.toContinuousLinearMap.{u, v, x} {𝕜 : Type u} [hnorm : NontriviallyNormedField 𝕜] {E : Type v} [AddCommGroup E] [Module 𝕜 E] [TopologicalSpace E] [IsTopologicalAddGroup E] [ContinuousSMul 𝕜 E] {F' : Type x} [AddCommGroup F'] [Module 𝕜 F'] [TopologicalSpace F'] [IsTopologicalAddGroup F'] [ContinuousSMul 𝕜 F'] [CompleteSpace 𝕜] [T2Space E] [FiniteDimensional 𝕜 E] : (E →ₗ[𝕜] F') ≃ₗ[𝕜] E →L[𝕜] F'The continuous linear map induced by a linear map on a finite-dimensional space(Matrix.toEuclideanLinMatrix.toEuclideanLin.{u_3, u_7, u_8} {𝕜 : Type u_3} [RCLike 𝕜] {m : Type u_7} {n : Type u_8} [Fintype n] [DecidableEq n] : Matrix m n 𝕜 ≃ₗ[𝕜] EuclideanSpace 𝕜 n →ₗ[𝕜] EuclideanSpace 𝕜 mA shorthand for `Matrix.toLpLin 2 2`.AMatrix (Fin m) (Fin n) ℝ)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.δℝ*HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.√Real.sqrt (x : ℝ) : ℝThe square root of a real number. This returns 0 for negative inputs. This has notation `√x`. Note that `√x⁻¹` is parsed as `√(x⁻¹)`.(HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.↑mℕ*HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.↑nℕ)HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.[SY25] Lemma 39
For any v\in \R^n we have
\begin{align*}
\|Av\|^2 &=\sum_{i=1}^m \left(\sum_{j=1}^na_{i,j}v_j\right)^2 \leq \sum_{i=1}^m\left(\sum_{j=1}^n \delta |v_j|\right)^2 = \delta^2 m\left(\sum_{j=1}^n |v_j|\right)^2 \leq \delta^2 m n \|v\|^2
\end{align*}
$$
using the Cauchy-Schwarz inequality. Dividing by \|v\| and taking the square root proves the claim.
Let A(x,y) be an m\times n matrix (1\le m,n\le 3) whose entries are products of terms in
\{0,1,-1,\pm\sin(z),\pm\cos(z)\}.
Let A_\mathbb{Q}(x,y) be obtained by replacing \sin,\cos with \ssin,\scos.
Then for x,y\in[-4,4], \|A(x,y)-A_{\mathbb{Q}}(x,y)\|\leq\kappa.
Lean code for Lemma7.5●1 theorem
Associated Lean declarations
-
theoremdefined in Noperthedron/RationalApprox/ApproximableMatrices.leancomplete
theorem RationalApprox.norm_matrix_actual_approx_le_kappa
RationalApprox.norm_matrix_actual_approx_le_kappa {m n : ↥(Finset.Icc 1 3)} (A : Matrix (Fin ↑m) (Fin ↑n) RationalApprox.DistLeKappaEntry) (x y : ↑(Set.Icc (-4) 4)) : ‖RationalApprox.clinActual A ↑x ↑y - RationalApprox.clinApprox A ↑x ↑y‖ ≤ RationalApprox.κ[SY25] Lemma 40{m↥(Finset.Icc 1 3)n↥(Finset.Icc 1 3): ↥(Finset.IccFinset.Icc.{u_1} {α : Type u_1} [Preorder α] [LocallyFiniteOrder α] (a b : α) : Finset αThe finset $[a, b]$ of elements `x` such that `a ≤ x` and `x ≤ b`. Basically `Set.Icc a b` as a finset.1 3)} (AMatrix (Fin ↑m) (Fin ↑n) RationalApprox.DistLeKappaEntry: MatrixMatrix.{u, u', v} (m : Type u) (n : Type u') (α : Type v) : Type (max u u' v)`Matrix m n R` is the type of matrices with entries in `R`, whose rows are indexed by `m` and whose columns are indexed by `n`.(FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.↑m↥(Finset.Icc 1 3)) (FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.↑n↥(Finset.Icc 1 3)) RationalApprox.DistLeKappaEntryRationalApprox.DistLeKappaEntry : Type) (x↑(Set.Icc (-4) 4)y↑(Set.Icc (-4) 4): ↑(Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4)) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.RationalApprox.clinActualRationalApprox.clinActual {m n : ℕ} (A : Matrix (Fin m) (Fin n) RationalApprox.DistLeKappaEntry) (x y : ℝ) : E n →L[ℝ] E mAMatrix (Fin ↑m) (Fin ↑n) RationalApprox.DistLeKappaEntry↑x↑(Set.Icc (-4) 4)↑y↑(Set.Icc (-4) 4)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).RationalApprox.clinApproxRationalApprox.clinApprox {m n : ℕ} (A : Matrix (Fin m) (Fin n) RationalApprox.DistLeKappaEntry) (x y : ℝ) : E n →L[ℝ] E mAMatrix (Fin ↑m) (Fin ↑n) RationalApprox.DistLeKappaEntry↑x↑(Set.Icc (-4) 4)↑y↑(Set.Icc (-4) 4)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝtheorem RationalApprox.norm_matrix_actual_approx_le_kappa
RationalApprox.norm_matrix_actual_approx_le_kappa {m n : ↥(Finset.Icc 1 3)} (A : Matrix (Fin ↑m) (Fin ↑n) RationalApprox.DistLeKappaEntry) (x y : ↑(Set.Icc (-4) 4)) : ‖RationalApprox.clinActual A ↑x ↑y - RationalApprox.clinApprox A ↑x ↑y‖ ≤ RationalApprox.κ[SY25] Lemma 40{m↥(Finset.Icc 1 3)n↥(Finset.Icc 1 3): ↥(Finset.IccFinset.Icc.{u_1} {α : Type u_1} [Preorder α] [LocallyFiniteOrder α] (a b : α) : Finset αThe finset $[a, b]$ of elements `x` such that `a ≤ x` and `x ≤ b`. Basically `Set.Icc a b` as a finset.1 3)} (AMatrix (Fin ↑m) (Fin ↑n) RationalApprox.DistLeKappaEntry: MatrixMatrix.{u, u', v} (m : Type u) (n : Type u') (α : Type v) : Type (max u u' v)`Matrix m n R` is the type of matrices with entries in `R`, whose rows are indexed by `m` and whose columns are indexed by `n`.(FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.↑m↥(Finset.Icc 1 3)) (FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.↑n↥(Finset.Icc 1 3)) RationalApprox.DistLeKappaEntryRationalApprox.DistLeKappaEntry : Type) (x↑(Set.Icc (-4) 4)y↑(Set.Icc (-4) 4): ↑(Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4)) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.RationalApprox.clinActualRationalApprox.clinActual {m n : ℕ} (A : Matrix (Fin m) (Fin n) RationalApprox.DistLeKappaEntry) (x y : ℝ) : E n →L[ℝ] E mAMatrix (Fin ↑m) (Fin ↑n) RationalApprox.DistLeKappaEntry↑x↑(Set.Icc (-4) 4)↑y↑(Set.Icc (-4) 4)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).RationalApprox.clinApproxRationalApprox.clinApprox {m n : ℕ} (A : Matrix (Fin m) (Fin n) RationalApprox.DistLeKappaEntry) (x y : ℝ) : E n →L[ℝ] E mAMatrix (Fin ↑m) (Fin ↑n) RationalApprox.DistLeKappaEntry↑x↑(Set.Icc (-4) 4)↑y↑(Set.Icc (-4) 4)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ[SY25] Lemma 40
Using Lemma 7.3 and Lemma 7.4.
We've replaced the assumption a_i(z)\in \{0,1,-1,\pm\sin(z),\pm\cos(z)\} in
Steininger and Yurkevich (2025)'s Lemma 40 with a_i(z)\in [-1,1].
By assumption, for fixed x,y every entry of A(x,y)-A_{\mathbb{Q}}(x,y) is of the form
a b - \widetilde{a}\widetilde{b} for some a,b\in[-1,1] and
|a-\widetilde{a}|,|b-\widetilde{b}|\leq \kappa/7 by Lemma 7.3.
This implies that
\begin{align*}
|ab-\widetilde{a}\widetilde{b}|&\leq |a b-a\widetilde{b}|+|a \widetilde{b}-\widetilde{a}\widetilde{b}| \\
&=|a|\cdot |b-\widetilde{b}|+|\widetilde{b}|\cdot |a-\widetilde{a}| \leq 1\cdot \kappa/7+(1+\kappa/7) \cdot \kappa/7 <\kappa/3.
\end{align*}
$$
So we can apply Lemma 7.4 and obtain that
\|A(x,y)-A_{\Q}(x,y)\|<\kappa/3\cdot \sqrt{3\cdot 3}=\kappa.
-
RationalApprox.R_difference_norm_bounded[complete] -
RationalApprox.R'_difference_norm_bounded[complete] -
RationalApprox.M_difference_norm_bounded[complete] -
RationalApprox.Mθ_difference_norm_bounded[complete] -
RationalApprox.Mφ_difference_norm_bounded[complete] -
RationalApprox.X_difference_norm_bounded[complete] -
RationalApprox.Rℚ_norm_bounded[complete] -
RationalApprox.Mℚ_norm_bounded[complete] -
RationalApprox.R'ℚ_norm_bounded[complete] -
RationalApprox.Mθℚ_norm_bounded[complete] -
RationalApprox.Mφℚ_norm_bounded[complete]
Let \alpha,\theta,\phi\in[-4,4].
Then
\|R(\alpha)-R_\mathbb{Q}(\alpha)\|,
\|R'(\alpha)-R'_\mathbb{Q}(\alpha)\|,
\|X(\theta,\phi)-X_\mathbb{Q}(\theta,\phi)\|,
\|M(\theta,\phi)-M_\mathbb{Q}(\theta,\phi)\|,
\|M^\theta(\theta,\phi)-M^\theta_\mathbb{Q}(\theta,\phi)\|,
\|M^\phi(\theta,\phi)-M^\phi_\mathbb{Q}(\theta,\phi)\|
are all at most \kappa.
Moreover \|R_\mathbb{Q}(\alpha)\|, \|R'_\mathbb{Q}(\alpha)\|, \|M_\mathbb{Q}(\theta, \phi)\|, \|M_{\Q}^{\theta}(\theta,\varphi)\|, \|M_{\Q}^{\phi}(\theta,\varphi)\| \leq 1+\kappa.
Lean code for Corollary7.6●11 theorems
Associated Lean declarations
-
RationalApprox.R_difference_norm_bounded[complete]
-
RationalApprox.R'_difference_norm_bounded[complete]
-
RationalApprox.M_difference_norm_bounded[complete]
-
RationalApprox.Mθ_difference_norm_bounded[complete]
-
RationalApprox.Mφ_difference_norm_bounded[complete]
-
RationalApprox.X_difference_norm_bounded[complete]
-
RationalApprox.Rℚ_norm_bounded[complete]
-
RationalApprox.Mℚ_norm_bounded[complete]
-
RationalApprox.R'ℚ_norm_bounded[complete]
-
RationalApprox.Mθℚ_norm_bounded[complete]
-
RationalApprox.Mφℚ_norm_bounded[complete]
-
RationalApprox.R_difference_norm_bounded[complete] -
RationalApprox.R'_difference_norm_bounded[complete] -
RationalApprox.M_difference_norm_bounded[complete] -
RationalApprox.Mθ_difference_norm_bounded[complete] -
RationalApprox.Mφ_difference_norm_bounded[complete] -
RationalApprox.X_difference_norm_bounded[complete] -
RationalApprox.Rℚ_norm_bounded[complete] -
RationalApprox.Mℚ_norm_bounded[complete] -
RationalApprox.R'ℚ_norm_bounded[complete] -
RationalApprox.Mθℚ_norm_bounded[complete] -
RationalApprox.Mφℚ_norm_bounded[complete]
-
theoremdefined in Noperthedron/RationalApprox/MatrixBounds.leancomplete
theorem RationalApprox.R_difference_norm_bounded
RationalApprox.R_difference_norm_bounded (α : ℝ) (hα : α ∈ Set.Icc (-4) 4) : ‖rotR α - RationalApprox.rotRℚℝ α‖ ≤ RationalApprox.κProof of [SY25] Corollary 41(αℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.) (hαα ∈ Set.Icc (-4) 4: αℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.rotRrotR : AddChar ℝ (Euc(2) →L[ℝ] Euc(2))αℝ-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).RationalApprox.rotRℚℝRationalApprox.rotRℚℝ (α : ℝ) : Euc(2) →L[ℝ] Euc(2)αℝ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝtheorem RationalApprox.R_difference_norm_bounded
RationalApprox.R_difference_norm_bounded (α : ℝ) (hα : α ∈ Set.Icc (-4) 4) : ‖rotR α - RationalApprox.rotRℚℝ α‖ ≤ RationalApprox.κProof of [SY25] Corollary 41(αℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.) (hαα ∈ Set.Icc (-4) 4: αℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.rotRrotR : AddChar ℝ (Euc(2) →L[ℝ] Euc(2))αℝ-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).RationalApprox.rotRℚℝRationalApprox.rotRℚℝ (α : ℝ) : Euc(2) →L[ℝ] Euc(2)αℝ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝProof of [SY25] Corollary 41
-
theoremdefined in Noperthedron/RationalApprox/MatrixBounds.leancomplete
theorem RationalApprox.R'_difference_norm_bounded
RationalApprox.R'_difference_norm_bounded (α : ℝ) (hα : α ∈ Set.Icc (-4) 4) : ‖rotR' α - RationalApprox.rotR'ℚℝ α‖ ≤ RationalApprox.κ(αℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.) (hαα ∈ Set.Icc (-4) 4: αℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.rotR'rotR' (α : ℝ) : Euc(2) →L[ℝ] Euc(2)αℝ-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).RationalApprox.rotR'ℚℝRationalApprox.rotR'ℚℝ (α : ℝ) : Euc(2) →L[ℝ] Euc(2)αℝ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝtheorem RationalApprox.R'_difference_norm_bounded
RationalApprox.R'_difference_norm_bounded (α : ℝ) (hα : α ∈ Set.Icc (-4) 4) : ‖rotR' α - RationalApprox.rotR'ℚℝ α‖ ≤ RationalApprox.κ(αℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.) (hαα ∈ Set.Icc (-4) 4: αℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.rotR'rotR' (α : ℝ) : Euc(2) →L[ℝ] Euc(2)αℝ-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).RationalApprox.rotR'ℚℝRationalApprox.rotR'ℚℝ (α : ℝ) : Euc(2) →L[ℝ] Euc(2)αℝ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ -
theoremdefined in Noperthedron/RationalApprox/MatrixBounds.leancomplete
theorem RationalApprox.M_difference_norm_bounded
RationalApprox.M_difference_norm_bounded (θ φ : ℝ) (hθ : θ ∈ Set.Icc (-4) 4) (hφ : φ ∈ Set.Icc (-4) 4) : ‖rotM θ φ - RationalApprox.rotMℚℝ θ φ‖ ≤ RationalApprox.κ(θℝφℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.) (hθθ ∈ Set.Icc (-4) 4: θℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) (hφφ ∈ Set.Icc (-4) 4: φℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.rotMrotM (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)θℝφℝ-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).RationalApprox.rotMℚℝRationalApprox.rotMℚℝ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)θℝφℝ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝtheorem RationalApprox.M_difference_norm_bounded
RationalApprox.M_difference_norm_bounded (θ φ : ℝ) (hθ : θ ∈ Set.Icc (-4) 4) (hφ : φ ∈ Set.Icc (-4) 4) : ‖rotM θ φ - RationalApprox.rotMℚℝ θ φ‖ ≤ RationalApprox.κ(θℝφℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.) (hθθ ∈ Set.Icc (-4) 4: θℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) (hφφ ∈ Set.Icc (-4) 4: φℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.rotMrotM (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)θℝφℝ-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).RationalApprox.rotMℚℝRationalApprox.rotMℚℝ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)θℝφℝ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ -
theoremdefined in Noperthedron/RationalApprox/MatrixBounds.leancomplete
theorem RationalApprox.Mθ_difference_norm_bounded
RationalApprox.Mθ_difference_norm_bounded (θ φ : ℝ) (hθ : θ ∈ Set.Icc (-4) 4) (hφ : φ ∈ Set.Icc (-4) 4) : ‖rotMθ θ φ - RationalApprox.rotMθℚℝ θ φ‖ ≤ RationalApprox.κ(θℝφℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.) (hθθ ∈ Set.Icc (-4) 4: θℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) (hφφ ∈ Set.Icc (-4) 4: φℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.rotMθrotMθ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)θℝφℝ-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).RationalApprox.rotMθℚℝRationalApprox.rotMθℚℝ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)θℝφℝ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝtheorem RationalApprox.Mθ_difference_norm_bounded
RationalApprox.Mθ_difference_norm_bounded (θ φ : ℝ) (hθ : θ ∈ Set.Icc (-4) 4) (hφ : φ ∈ Set.Icc (-4) 4) : ‖rotMθ θ φ - RationalApprox.rotMθℚℝ θ φ‖ ≤ RationalApprox.κ(θℝφℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.) (hθθ ∈ Set.Icc (-4) 4: θℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) (hφφ ∈ Set.Icc (-4) 4: φℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.rotMθrotMθ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)θℝφℝ-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).RationalApprox.rotMθℚℝRationalApprox.rotMθℚℝ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)θℝφℝ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ -
theoremdefined in Noperthedron/RationalApprox/MatrixBounds.leancomplete
theorem RationalApprox.Mφ_difference_norm_bounded
RationalApprox.Mφ_difference_norm_bounded (θ φ : ℝ) (hθ : θ ∈ Set.Icc (-4) 4) (hφ : φ ∈ Set.Icc (-4) 4) : ‖rotMφ θ φ - RationalApprox.rotMφℚℝ θ φ‖ ≤ RationalApprox.κ(θℝφℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.) (hθθ ∈ Set.Icc (-4) 4: θℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) (hφφ ∈ Set.Icc (-4) 4: φℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.rotMφrotMφ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)θℝφℝ-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).RationalApprox.rotMφℚℝRationalApprox.rotMφℚℝ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)θℝφℝ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝtheorem RationalApprox.Mφ_difference_norm_bounded
RationalApprox.Mφ_difference_norm_bounded (θ φ : ℝ) (hθ : θ ∈ Set.Icc (-4) 4) (hφ : φ ∈ Set.Icc (-4) 4) : ‖rotMφ θ φ - RationalApprox.rotMφℚℝ θ φ‖ ≤ RationalApprox.κ(θℝφℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.) (hθθ ∈ Set.Icc (-4) 4: θℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) (hφφ ∈ Set.Icc (-4) 4: φℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.rotMφrotMφ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)θℝφℝ-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).RationalApprox.rotMφℚℝRationalApprox.rotMφℚℝ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)θℝφℝ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ -
theoremdefined in Noperthedron/RationalApprox/MatrixBounds.leancomplete
theorem RationalApprox.X_difference_norm_bounded
RationalApprox.X_difference_norm_bounded (θ φ : ℝ) (hθ : θ ∈ Set.Icc (-4) 4) (hφ : φ ∈ Set.Icc (-4) 4) : ‖vecXL θ φ - RationalApprox.vecXLℚℝ θ φ‖ ≤ RationalApprox.κ(θℝφℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.) (hθθ ∈ Set.Icc (-4) 4: θℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) (hφφ ∈ Set.Icc (-4) 4: φℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.vecXLvecXL (θ φ : ℝ) : Euc(1) →L[ℝ] Euc(3)θℝφℝ-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).RationalApprox.vecXLℚℝRationalApprox.vecXLℚℝ (θ φ : ℝ) : Euc(1) →L[ℝ] Euc(3)θℝφℝ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝtheorem RationalApprox.X_difference_norm_bounded
RationalApprox.X_difference_norm_bounded (θ φ : ℝ) (hθ : θ ∈ Set.Icc (-4) 4) (hφ : φ ∈ Set.Icc (-4) 4) : ‖vecXL θ φ - RationalApprox.vecXLℚℝ θ φ‖ ≤ RationalApprox.κ(θℝφℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.) (hθθ ∈ Set.Icc (-4) 4: θℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) (hφφ ∈ Set.Icc (-4) 4: φℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.vecXLvecXL (θ φ : ℝ) : Euc(1) →L[ℝ] Euc(3)θℝφℝ-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).RationalApprox.vecXLℚℝRationalApprox.vecXLℚℝ (θ φ : ℝ) : Euc(1) →L[ℝ] Euc(3)θℝφℝ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ -
theoremdefined in Noperthedron/RationalApprox/MatrixBounds.leancomplete
theorem RationalApprox.Rℚ_norm_bounded
RationalApprox.Rℚ_norm_bounded (α : ℝ) (hα : α ∈ Set.Icc (-4) 4) : ‖RationalApprox.rotRℚℝ α‖ ≤ 1 + RationalApprox.κ(αℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.) (hαα ∈ Set.Icc (-4) 4: αℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.RationalApprox.rotRℚℝRationalApprox.rotRℚℝ (α : ℝ) : Euc(2) →L[ℝ] Euc(2)αℝ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1 +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.RationalApprox.κRationalApprox.κ : ℝtheorem RationalApprox.Rℚ_norm_bounded
RationalApprox.Rℚ_norm_bounded (α : ℝ) (hα : α ∈ Set.Icc (-4) 4) : ‖RationalApprox.rotRℚℝ α‖ ≤ 1 + RationalApprox.κ(αℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.) (hαα ∈ Set.Icc (-4) 4: αℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.RationalApprox.rotRℚℝRationalApprox.rotRℚℝ (α : ℝ) : Euc(2) →L[ℝ] Euc(2)αℝ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1 +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.RationalApprox.κRationalApprox.κ : ℝ -
theoremdefined in Noperthedron/RationalApprox/MatrixBounds.leancomplete
theorem RationalApprox.Mℚ_norm_bounded
RationalApprox.Mℚ_norm_bounded {θ φ : ℝ} (hθ : θ ∈ Set.Icc (-4) 4) (hφ : φ ∈ Set.Icc (-4) 4) : ‖RationalApprox.rotMℚℝ θ φ‖ ≤ 1 + RationalApprox.κ{θℝφℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.} (hθθ ∈ Set.Icc (-4) 4: θℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) (hφφ ∈ Set.Icc (-4) 4: φℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.RationalApprox.rotMℚℝRationalApprox.rotMℚℝ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)θℝφℝ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1 +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.RationalApprox.κRationalApprox.κ : ℝtheorem RationalApprox.Mℚ_norm_bounded
RationalApprox.Mℚ_norm_bounded {θ φ : ℝ} (hθ : θ ∈ Set.Icc (-4) 4) (hφ : φ ∈ Set.Icc (-4) 4) : ‖RationalApprox.rotMℚℝ θ φ‖ ≤ 1 + RationalApprox.κ{θℝφℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.} (hθθ ∈ Set.Icc (-4) 4: θℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) (hφφ ∈ Set.Icc (-4) 4: φℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.RationalApprox.rotMℚℝRationalApprox.rotMℚℝ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)θℝφℝ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1 +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.RationalApprox.κRationalApprox.κ : ℝ -
theoremdefined in Noperthedron/RationalApprox/MatrixBounds.leancomplete
theorem RationalApprox.R'ℚ_norm_bounded
RationalApprox.R'ℚ_norm_bounded (α : ℝ) (hα : α ∈ Set.Icc (-4) 4) : ‖RationalApprox.rotR'ℚℝ α‖ ≤ 1 + RationalApprox.κ(αℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.) (hαα ∈ Set.Icc (-4) 4: αℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.RationalApprox.rotR'ℚℝRationalApprox.rotR'ℚℝ (α : ℝ) : Euc(2) →L[ℝ] Euc(2)αℝ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1 +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.RationalApprox.κRationalApprox.κ : ℝtheorem RationalApprox.R'ℚ_norm_bounded
RationalApprox.R'ℚ_norm_bounded (α : ℝ) (hα : α ∈ Set.Icc (-4) 4) : ‖RationalApprox.rotR'ℚℝ α‖ ≤ 1 + RationalApprox.κ(αℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.) (hαα ∈ Set.Icc (-4) 4: αℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.RationalApprox.rotR'ℚℝRationalApprox.rotR'ℚℝ (α : ℝ) : Euc(2) →L[ℝ] Euc(2)αℝ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1 +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.RationalApprox.κRationalApprox.κ : ℝ -
theoremdefined in Noperthedron/RationalApprox/MatrixBounds.leancomplete
theorem RationalApprox.Mθℚ_norm_bounded
RationalApprox.Mθℚ_norm_bounded {θ φ : ℝ} (hθ : θ ∈ Set.Icc (-4) 4) (hφ : φ ∈ Set.Icc (-4) 4) : ‖RationalApprox.rotMθℚℝ θ φ‖ ≤ 1 + RationalApprox.κ{θℝφℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.} (hθθ ∈ Set.Icc (-4) 4: θℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) (hφφ ∈ Set.Icc (-4) 4: φℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.RationalApprox.rotMθℚℝRationalApprox.rotMθℚℝ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)θℝφℝ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1 +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.RationalApprox.κRationalApprox.κ : ℝtheorem RationalApprox.Mθℚ_norm_bounded
RationalApprox.Mθℚ_norm_bounded {θ φ : ℝ} (hθ : θ ∈ Set.Icc (-4) 4) (hφ : φ ∈ Set.Icc (-4) 4) : ‖RationalApprox.rotMθℚℝ θ φ‖ ≤ 1 + RationalApprox.κ{θℝφℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.} (hθθ ∈ Set.Icc (-4) 4: θℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) (hφφ ∈ Set.Icc (-4) 4: φℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.RationalApprox.rotMθℚℝRationalApprox.rotMθℚℝ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)θℝφℝ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1 +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.RationalApprox.κRationalApprox.κ : ℝ -
theoremdefined in Noperthedron/RationalApprox/MatrixBounds.leancomplete
theorem RationalApprox.Mφℚ_norm_bounded
RationalApprox.Mφℚ_norm_bounded {θ φ : ℝ} (hθ : θ ∈ Set.Icc (-4) 4) (hφ : φ ∈ Set.Icc (-4) 4) : ‖RationalApprox.rotMφℚℝ θ φ‖ ≤ 1 + RationalApprox.κ{θℝφℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.} (hθθ ∈ Set.Icc (-4) 4: θℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) (hφφ ∈ Set.Icc (-4) 4: φℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.RationalApprox.rotMφℚℝRationalApprox.rotMφℚℝ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)θℝφℝ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1 +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.RationalApprox.κRationalApprox.κ : ℝtheorem RationalApprox.Mφℚ_norm_bounded
RationalApprox.Mφℚ_norm_bounded {θ φ : ℝ} (hθ : θ ∈ Set.Icc (-4) 4) (hφ : φ ∈ Set.Icc (-4) 4) : ‖RationalApprox.rotMφℚℝ θ φ‖ ≤ 1 + RationalApprox.κ{θℝφℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.} (hθθ ∈ Set.Icc (-4) 4: θℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) (hφφ ∈ Set.Icc (-4) 4: φℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.RationalApprox.rotMφℚℝRationalApprox.rotMφℚℝ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)θℝφℝ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1 +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.RationalApprox.κRationalApprox.κ : ℝ
Using Lemma 7.5 and Lemma 3.1.
The first statement is a direct application of Lemma 7.5 and the second statement follows immediately after using Lemma 3.1 and the triangle inequality.
The derivative norm bounds follow similarly, using that the operator norms of R', M^\theta, and M^\phi are at most 1.
-
RationalApprox.norm_sub_le_prod[complete]
Let (A_i,B_i) for 1\le i\le n be pairs of same-size real matrices,
with products A_1\cdots A_n and B_1\cdots B_n defined.
If \|A_i-B_i\|\leq \kappa and
\delta_i\geq \max(\|A_i\|,\|B_i\|,1),
then
\|A_1\cdots A_n-B_1\cdots B_n\|\leq n\kappa\,\delta_1\cdots\delta_n.
Lean code for Lemma7.7●1 theorem
Associated Lean declarations
-
RationalApprox.norm_sub_le_prod[complete]
-
RationalApprox.norm_sub_le_prod[complete]
-
theoremdefined in Noperthedron/RationalApprox/Lemma42.leancomplete
theorem RationalApprox.norm_sub_le_prod
RationalApprox.norm_sub_le_prod {n m : ℕ} (mv : RationalApprox.MatVec n m) (κ : ℝ) (κ_pos : κ > 0) (hκ : mv.DiffBoundedBy κ) : ‖mv.compA - mv.compB‖ ≤ ↑mv.size * κ * mv.maxNormList.prod[SY25] Lemma 42{nℕmℕ: ℕNat : TypeThe natural numbers, starting at zero. This type is special-cased by both the kernel and the compiler, and overridden with an efficient implementation. Both use a fast arbitrary-precision arithmetic library (usually [GMP](https://gmplib.org/)); at runtime, `Nat` values that are sufficiently small are unboxed.} (mvRationalApprox.MatVec n m: RationalApprox.MatVecRationalApprox.MatVec (n m : ℕ) : TypeTwo sequences of matrices A₁,...,Aₖ and B₁,...,Bₖ with sizes that make the products A₁...Aₖ and B₁...Bₖ well-defined, as in [SY25] Lemma 42.nℕmℕ) (κℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.) (κ_posκ > 0: κℝ>GT.gt.{u} {α : Type u} [LT α] (a b : α) : Prop`a > b` is an abbreviation for `b < a`. Conventions for notations in identifiers: * The recommended spelling of `>` in identifiers is `gt`.0) (hκmv.DiffBoundedBy κ: mvRationalApprox.MatVec n m.DiffBoundedByRationalApprox.MatVec.DiffBoundedBy {n m : ℕ} (mv : RationalApprox.MatVec n m) (κ : ℝ) : Propκℝ) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.mvRationalApprox.MatVec n m.compARationalApprox.MatVec.compA {n m : ℕ} (mv : RationalApprox.MatVec n m) : Euc(m) →L[ℝ] Euc(n)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).mvRationalApprox.MatVec n m.compBRationalApprox.MatVec.compB {n m : ℕ} (mv : RationalApprox.MatVec n m) : Euc(m) →L[ℝ] Euc(n)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.↑mvRationalApprox.MatVec n m.sizeRationalApprox.MatVec.size {n m : ℕ} (mv : RationalApprox.MatVec n m) : ℕ*HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.κℝ*HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.mvRationalApprox.MatVec n m.maxNormListRationalApprox.MatVec.maxNormList {n m : ℕ} (mv : RationalApprox.MatVec n m) : List ℝ.prodList.prod.{u_1} {α : Type u_1} [Mul α] [One α] (xs : List α) : αComputes the product of the elements of a list. Examples: [a, b, c].prod = a * (b * (c * 1)) [2, 3, 5].prod = 30theorem RationalApprox.norm_sub_le_prod
RationalApprox.norm_sub_le_prod {n m : ℕ} (mv : RationalApprox.MatVec n m) (κ : ℝ) (κ_pos : κ > 0) (hκ : mv.DiffBoundedBy κ) : ‖mv.compA - mv.compB‖ ≤ ↑mv.size * κ * mv.maxNormList.prod[SY25] Lemma 42{nℕmℕ: ℕNat : TypeThe natural numbers, starting at zero. This type is special-cased by both the kernel and the compiler, and overridden with an efficient implementation. Both use a fast arbitrary-precision arithmetic library (usually [GMP](https://gmplib.org/)); at runtime, `Nat` values that are sufficiently small are unboxed.} (mvRationalApprox.MatVec n m: RationalApprox.MatVecRationalApprox.MatVec (n m : ℕ) : TypeTwo sequences of matrices A₁,...,Aₖ and B₁,...,Bₖ with sizes that make the products A₁...Aₖ and B₁...Bₖ well-defined, as in [SY25] Lemma 42.nℕmℕ) (κℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.) (κ_posκ > 0: κℝ>GT.gt.{u} {α : Type u} [LT α] (a b : α) : Prop`a > b` is an abbreviation for `b < a`. Conventions for notations in identifiers: * The recommended spelling of `>` in identifiers is `gt`.0) (hκmv.DiffBoundedBy κ: mvRationalApprox.MatVec n m.DiffBoundedByRationalApprox.MatVec.DiffBoundedBy {n m : ℕ} (mv : RationalApprox.MatVec n m) (κ : ℝ) : Propκℝ) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.mvRationalApprox.MatVec n m.compARationalApprox.MatVec.compA {n m : ℕ} (mv : RationalApprox.MatVec n m) : Euc(m) →L[ℝ] Euc(n)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).mvRationalApprox.MatVec n m.compBRationalApprox.MatVec.compB {n m : ℕ} (mv : RationalApprox.MatVec n m) : Euc(m) →L[ℝ] Euc(n)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.↑mvRationalApprox.MatVec n m.sizeRationalApprox.MatVec.size {n m : ℕ} (mv : RationalApprox.MatVec n m) : ℕ*HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.κℝ*HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.mvRationalApprox.MatVec n m.maxNormListRationalApprox.MatVec.maxNormList {n m : ℕ} (mv : RationalApprox.MatVec n m) : List ℝ.prodList.prod.{u_1} {α : Type u_1} [Mul α] [One α] (xs : List α) : αComputes the product of the elements of a list. Examples: [a, b, c].prod = a * (b * (c * 1)) [2, 3, 5].prod = 30[SY25] Lemma 42
See polyhedron.without.rupert, Lemma 42.
-
RationalApprox.bounds_kappa_M[complete] -
RationalApprox.bounds_kappa_Mθ[complete] -
RationalApprox.bounds_kappa_Mφ[complete] -
RationalApprox.bounds_kappa_RM[complete] -
RationalApprox.bounds_kappa_R'M[complete] -
RationalApprox.bounds_kappa_RMθ[complete] -
RationalApprox.bounds_kappa_RMφ[complete]
Let \alpha, \theta, \phi \in [-4,4], P\in \R^3 with \|P\| \leq 1
and let \widetilde{P} be a \kappa-rational approximation of P.
Set M = M(\theta, \phi) and M_{\Q} = M_{\Q}(\theta, \phi),
M^\theta = M^\theta(\theta, \phi) and M^\theta_{\Q} = M^\theta_{\Q}(\theta, \phi),
M^\phi = M^\phi(\theta, \phi) and M^\phi_{\Q} = M^\phi_{\Q}(\theta, \phi),
as well as R = R(\alpha), R_{\Q} = R_{\Q}(\alpha), R' = R'(\alpha),
R'_{\Q} = R'_{\Q}(\alpha).
Finally let w \in \R^2 with \|w\| = 1.
Then:
\begin{align}
| \langle M P, w\rangle - \langle M_{\Q} \widetilde{P}, w\rangle | & \leq 3\kappa \\
| \langle M^\theta P, w\rangle - \langle M^\theta_{\Q} \widetilde{P}, w\rangle | & \leq 3\kappa,\\
| \langle M^\phi P, w\rangle - \langle M^\phi_{\Q} \widetilde{P}, w\rangle | & \leq 3\kappa,\\
| \langle R M P, w\rangle - \langle R_{\Q} M_{\Q} \widetilde{P}, w\rangle | & \leq 4\kappa \\
| \langle R' M P, w\rangle - \langle R'_{\Q} M_{\Q} \widetilde{P}, w\rangle | & \leq 4\kappa,\\
| \langle R M^\theta P, w\rangle - \langle R_{\Q} M^\theta_{\Q} \widetilde{P}, w\rangle | & \leq 4\kappa,\\
| \langle R M^\phi P, w\rangle - \langle R_{\Q} M^\phi_{\Q} \widetilde{P}, w\rangle | & \leq 4\kappa.
\end{align}
$$
Lean code for Lemma7.8●7 theorems
Associated Lean declarations
-
RationalApprox.bounds_kappa_M[complete]
-
RationalApprox.bounds_kappa_Mθ[complete]
-
RationalApprox.bounds_kappa_Mφ[complete]
-
RationalApprox.bounds_kappa_RM[complete]
-
RationalApprox.bounds_kappa_R'M[complete]
-
RationalApprox.bounds_kappa_RMθ[complete]
-
RationalApprox.bounds_kappa_RMφ[complete]
-
RationalApprox.bounds_kappa_M[complete] -
RationalApprox.bounds_kappa_Mθ[complete] -
RationalApprox.bounds_kappa_Mφ[complete] -
RationalApprox.bounds_kappa_RM[complete] -
RationalApprox.bounds_kappa_R'M[complete] -
RationalApprox.bounds_kappa_RMθ[complete] -
RationalApprox.bounds_kappa_RMφ[complete]
-
theoremdefined in Noperthedron/RationalApprox/BoundsKappa.leancomplete
theorem RationalApprox.bounds_kappa_M
RationalApprox.bounds_kappa_M {P : Euc(3)} {P_ : Fin 3 → ℚ} {θ φ : ↑(Set.Icc (-4) 4)} {w : Fin 2 → ℚ} (hP : ‖P‖ ≤ 1) (approx : ‖P - toR3 P_‖ ≤ RationalApprox.κ) (hw : ‖toR2 w‖ = 1) : ‖inner ℝ ((rotM ↑↑θ ↑↑φ) P) (toR2 w) - ↑((RationalApprox.rotMℚ ↑θ ↑φ) P_ ⬝ᵥ w)‖ ≤ 3 * RationalApprox.κ{PEuc(3): Euc(EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.3)EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.} {P_Fin 3 → ℚ: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.3 → ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.} {θ↑(Set.Icc (-4) 4)φ↑(Set.Icc (-4) 4): ↑(Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4)} {wFin 2 → ℚ: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.2 → ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.} (hP‖P‖ ≤ 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1) (approx‖P - toR3 P_‖ ≤ RationalApprox.κ: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).toR3toR3 (v : Fin 3 → ℚ) : Euc(3)Cast a `Fin 3 → ℚ` to an `ℝ³` point.P_Fin 3 → ℚ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ) (hw‖toR2 w‖ = 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.toR2toR2 (v : Fin 2 → ℚ) : Euc(2)Cast a `Fin 2 → ℚ` to an `ℝ²` point.wFin 2 → ℚ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.1) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.innerInner.inner.{u_4, u_5} (𝕜 : Type u_4) {E : Type u_5} [self : Inner 𝕜 E] : E → E → 𝕜The inner product function.ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.((rotMrotM (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑↑θ↑(Set.Icc (-4) 4)↑↑φ↑(Set.Icc (-4) 4)) PEuc(3)) (toR2toR2 (v : Fin 2 → ℚ) : Euc(2)Cast a `Fin 2 → ℚ` to an `ℝ²` point.wFin 2 → ℚ) -HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).↑(dotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.(RationalApprox.rotMℚRationalApprox.rotMℚ (θ φ : ℚ) : (Fin 3 → ℚ) →ₗ[ℚ] Fin 2 → ℚ↑θ↑(Set.Icc (-4) 4)↑φ↑(Set.Icc (-4) 4)) P_Fin 3 → ℚ⬝ᵥdotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.wFin 2 → ℚ)dotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.3 *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.RationalApprox.κRationalApprox.κ : ℝtheorem RationalApprox.bounds_kappa_M
RationalApprox.bounds_kappa_M {P : Euc(3)} {P_ : Fin 3 → ℚ} {θ φ : ↑(Set.Icc (-4) 4)} {w : Fin 2 → ℚ} (hP : ‖P‖ ≤ 1) (approx : ‖P - toR3 P_‖ ≤ RationalApprox.κ) (hw : ‖toR2 w‖ = 1) : ‖inner ℝ ((rotM ↑↑θ ↑↑φ) P) (toR2 w) - ↑((RationalApprox.rotMℚ ↑θ ↑φ) P_ ⬝ᵥ w)‖ ≤ 3 * RationalApprox.κ{PEuc(3): Euc(EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.3)EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.} {P_Fin 3 → ℚ: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.3 → ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.} {θ↑(Set.Icc (-4) 4)φ↑(Set.Icc (-4) 4): ↑(Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4)} {wFin 2 → ℚ: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.2 → ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.} (hP‖P‖ ≤ 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1) (approx‖P - toR3 P_‖ ≤ RationalApprox.κ: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).toR3toR3 (v : Fin 3 → ℚ) : Euc(3)Cast a `Fin 3 → ℚ` to an `ℝ³` point.P_Fin 3 → ℚ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ) (hw‖toR2 w‖ = 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.toR2toR2 (v : Fin 2 → ℚ) : Euc(2)Cast a `Fin 2 → ℚ` to an `ℝ²` point.wFin 2 → ℚ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.1) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.innerInner.inner.{u_4, u_5} (𝕜 : Type u_4) {E : Type u_5} [self : Inner 𝕜 E] : E → E → 𝕜The inner product function.ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.((rotMrotM (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑↑θ↑(Set.Icc (-4) 4)↑↑φ↑(Set.Icc (-4) 4)) PEuc(3)) (toR2toR2 (v : Fin 2 → ℚ) : Euc(2)Cast a `Fin 2 → ℚ` to an `ℝ²` point.wFin 2 → ℚ) -HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).↑(dotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.(RationalApprox.rotMℚRationalApprox.rotMℚ (θ φ : ℚ) : (Fin 3 → ℚ) →ₗ[ℚ] Fin 2 → ℚ↑θ↑(Set.Icc (-4) 4)↑φ↑(Set.Icc (-4) 4)) P_Fin 3 → ℚ⬝ᵥdotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.wFin 2 → ℚ)dotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.3 *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.RationalApprox.κRationalApprox.κ : ℝ -
theoremdefined in Noperthedron/RationalApprox/BoundsKappa.leancomplete
theorem RationalApprox.bounds_kappa_Mθ
RationalApprox.bounds_kappa_Mθ {P : Euc(3)} {P_ : Fin 3 → ℚ} {θ φ : ↑(Set.Icc (-4) 4)} {w : Fin 2 → ℚ} (hP : ‖P‖ ≤ 1) (approx : ‖P - toR3 P_‖ ≤ RationalApprox.κ) (hw : ‖toR2 w‖ = 1) : ‖inner ℝ ((rotMθ ↑↑θ ↑↑φ) P) (toR2 w) - ↑((RationalApprox.rotMθℚ ↑θ ↑φ) P_ ⬝ᵥ w)‖ ≤ 3 * RationalApprox.κ{PEuc(3): Euc(EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.3)EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.} {P_Fin 3 → ℚ: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.3 → ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.} {θ↑(Set.Icc (-4) 4)φ↑(Set.Icc (-4) 4): ↑(Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4)} {wFin 2 → ℚ: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.2 → ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.} (hP‖P‖ ≤ 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1) (approx‖P - toR3 P_‖ ≤ RationalApprox.κ: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).toR3toR3 (v : Fin 3 → ℚ) : Euc(3)Cast a `Fin 3 → ℚ` to an `ℝ³` point.P_Fin 3 → ℚ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ) (hw‖toR2 w‖ = 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.toR2toR2 (v : Fin 2 → ℚ) : Euc(2)Cast a `Fin 2 → ℚ` to an `ℝ²` point.wFin 2 → ℚ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.1) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.innerInner.inner.{u_4, u_5} (𝕜 : Type u_4) {E : Type u_5} [self : Inner 𝕜 E] : E → E → 𝕜The inner product function.ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.((rotMθrotMθ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑↑θ↑(Set.Icc (-4) 4)↑↑φ↑(Set.Icc (-4) 4)) PEuc(3)) (toR2toR2 (v : Fin 2 → ℚ) : Euc(2)Cast a `Fin 2 → ℚ` to an `ℝ²` point.wFin 2 → ℚ) -HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).↑(dotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.(RationalApprox.rotMθℚRationalApprox.rotMθℚ (θ φ : ℚ) : (Fin 3 → ℚ) →ₗ[ℚ] Fin 2 → ℚ↑θ↑(Set.Icc (-4) 4)↑φ↑(Set.Icc (-4) 4)) P_Fin 3 → ℚ⬝ᵥdotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.wFin 2 → ℚ)dotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.3 *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.RationalApprox.κRationalApprox.κ : ℝtheorem RationalApprox.bounds_kappa_Mθ
RationalApprox.bounds_kappa_Mθ {P : Euc(3)} {P_ : Fin 3 → ℚ} {θ φ : ↑(Set.Icc (-4) 4)} {w : Fin 2 → ℚ} (hP : ‖P‖ ≤ 1) (approx : ‖P - toR3 P_‖ ≤ RationalApprox.κ) (hw : ‖toR2 w‖ = 1) : ‖inner ℝ ((rotMθ ↑↑θ ↑↑φ) P) (toR2 w) - ↑((RationalApprox.rotMθℚ ↑θ ↑φ) P_ ⬝ᵥ w)‖ ≤ 3 * RationalApprox.κ{PEuc(3): Euc(EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.3)EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.} {P_Fin 3 → ℚ: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.3 → ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.} {θ↑(Set.Icc (-4) 4)φ↑(Set.Icc (-4) 4): ↑(Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4)} {wFin 2 → ℚ: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.2 → ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.} (hP‖P‖ ≤ 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1) (approx‖P - toR3 P_‖ ≤ RationalApprox.κ: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).toR3toR3 (v : Fin 3 → ℚ) : Euc(3)Cast a `Fin 3 → ℚ` to an `ℝ³` point.P_Fin 3 → ℚ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ) (hw‖toR2 w‖ = 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.toR2toR2 (v : Fin 2 → ℚ) : Euc(2)Cast a `Fin 2 → ℚ` to an `ℝ²` point.wFin 2 → ℚ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.1) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.innerInner.inner.{u_4, u_5} (𝕜 : Type u_4) {E : Type u_5} [self : Inner 𝕜 E] : E → E → 𝕜The inner product function.ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.((rotMθrotMθ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑↑θ↑(Set.Icc (-4) 4)↑↑φ↑(Set.Icc (-4) 4)) PEuc(3)) (toR2toR2 (v : Fin 2 → ℚ) : Euc(2)Cast a `Fin 2 → ℚ` to an `ℝ²` point.wFin 2 → ℚ) -HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).↑(dotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.(RationalApprox.rotMθℚRationalApprox.rotMθℚ (θ φ : ℚ) : (Fin 3 → ℚ) →ₗ[ℚ] Fin 2 → ℚ↑θ↑(Set.Icc (-4) 4)↑φ↑(Set.Icc (-4) 4)) P_Fin 3 → ℚ⬝ᵥdotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.wFin 2 → ℚ)dotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.3 *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.RationalApprox.κRationalApprox.κ : ℝ -
theoremdefined in Noperthedron/RationalApprox/BoundsKappa.leancomplete
theorem RationalApprox.bounds_kappa_Mφ
RationalApprox.bounds_kappa_Mφ {P : Euc(3)} {P_ : Fin 3 → ℚ} {θ φ : ↑(Set.Icc (-4) 4)} {w : Fin 2 → ℚ} (hP : ‖P‖ ≤ 1) (approx : ‖P - toR3 P_‖ ≤ RationalApprox.κ) (hw : ‖toR2 w‖ = 1) : ‖inner ℝ ((rotMφ ↑↑θ ↑↑φ) P) (toR2 w) - ↑((RationalApprox.rotMφℚ ↑θ ↑φ) P_ ⬝ᵥ w)‖ ≤ 3 * RationalApprox.κ{PEuc(3): Euc(EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.3)EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.} {P_Fin 3 → ℚ: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.3 → ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.} {θ↑(Set.Icc (-4) 4)φ↑(Set.Icc (-4) 4): ↑(Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4)} {wFin 2 → ℚ: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.2 → ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.} (hP‖P‖ ≤ 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1) (approx‖P - toR3 P_‖ ≤ RationalApprox.κ: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).toR3toR3 (v : Fin 3 → ℚ) : Euc(3)Cast a `Fin 3 → ℚ` to an `ℝ³` point.P_Fin 3 → ℚ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ) (hw‖toR2 w‖ = 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.toR2toR2 (v : Fin 2 → ℚ) : Euc(2)Cast a `Fin 2 → ℚ` to an `ℝ²` point.wFin 2 → ℚ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.1) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.innerInner.inner.{u_4, u_5} (𝕜 : Type u_4) {E : Type u_5} [self : Inner 𝕜 E] : E → E → 𝕜The inner product function.ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.((rotMφrotMφ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑↑θ↑(Set.Icc (-4) 4)↑↑φ↑(Set.Icc (-4) 4)) PEuc(3)) (toR2toR2 (v : Fin 2 → ℚ) : Euc(2)Cast a `Fin 2 → ℚ` to an `ℝ²` point.wFin 2 → ℚ) -HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).↑(dotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.(RationalApprox.rotMφℚRationalApprox.rotMφℚ (θ φ : ℚ) : (Fin 3 → ℚ) →ₗ[ℚ] Fin 2 → ℚ↑θ↑(Set.Icc (-4) 4)↑φ↑(Set.Icc (-4) 4)) P_Fin 3 → ℚ⬝ᵥdotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.wFin 2 → ℚ)dotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.3 *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.RationalApprox.κRationalApprox.κ : ℝtheorem RationalApprox.bounds_kappa_Mφ
RationalApprox.bounds_kappa_Mφ {P : Euc(3)} {P_ : Fin 3 → ℚ} {θ φ : ↑(Set.Icc (-4) 4)} {w : Fin 2 → ℚ} (hP : ‖P‖ ≤ 1) (approx : ‖P - toR3 P_‖ ≤ RationalApprox.κ) (hw : ‖toR2 w‖ = 1) : ‖inner ℝ ((rotMφ ↑↑θ ↑↑φ) P) (toR2 w) - ↑((RationalApprox.rotMφℚ ↑θ ↑φ) P_ ⬝ᵥ w)‖ ≤ 3 * RationalApprox.κ{PEuc(3): Euc(EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.3)EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.} {P_Fin 3 → ℚ: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.3 → ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.} {θ↑(Set.Icc (-4) 4)φ↑(Set.Icc (-4) 4): ↑(Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4)} {wFin 2 → ℚ: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.2 → ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.} (hP‖P‖ ≤ 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1) (approx‖P - toR3 P_‖ ≤ RationalApprox.κ: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).toR3toR3 (v : Fin 3 → ℚ) : Euc(3)Cast a `Fin 3 → ℚ` to an `ℝ³` point.P_Fin 3 → ℚ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ) (hw‖toR2 w‖ = 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.toR2toR2 (v : Fin 2 → ℚ) : Euc(2)Cast a `Fin 2 → ℚ` to an `ℝ²` point.wFin 2 → ℚ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.1) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.innerInner.inner.{u_4, u_5} (𝕜 : Type u_4) {E : Type u_5} [self : Inner 𝕜 E] : E → E → 𝕜The inner product function.ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.((rotMφrotMφ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑↑θ↑(Set.Icc (-4) 4)↑↑φ↑(Set.Icc (-4) 4)) PEuc(3)) (toR2toR2 (v : Fin 2 → ℚ) : Euc(2)Cast a `Fin 2 → ℚ` to an `ℝ²` point.wFin 2 → ℚ) -HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).↑(dotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.(RationalApprox.rotMφℚRationalApprox.rotMφℚ (θ φ : ℚ) : (Fin 3 → ℚ) →ₗ[ℚ] Fin 2 → ℚ↑θ↑(Set.Icc (-4) 4)↑φ↑(Set.Icc (-4) 4)) P_Fin 3 → ℚ⬝ᵥdotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.wFin 2 → ℚ)dotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.3 *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.RationalApprox.κRationalApprox.κ : ℝ -
theoremdefined in Noperthedron/RationalApprox/BoundsKappa.leancomplete
theorem RationalApprox.bounds_kappa_RM
RationalApprox.bounds_kappa_RM {P : Euc(3)} {P_ : Fin 3 → ℚ} {α θ φ : ↑(Set.Icc (-4) 4)} {w : Fin 2 → ℚ} (hP : ‖P‖ ≤ 1) (approx : ‖P - toR3 P_‖ ≤ RationalApprox.κ) (hw : ‖toR2 w‖ = 1) : ‖inner ℝ ((rotR ↑↑α) ((rotM ↑↑θ ↑↑φ) P)) (toR2 w) - ↑((RationalApprox.rotRℚ ↑α) ((RationalApprox.rotMℚ ↑θ ↑φ) P_) ⬝ᵥ w)‖ ≤ 4 * RationalApprox.κ{PEuc(3): Euc(EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.3)EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.} {P_Fin 3 → ℚ: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.3 → ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.} {α↑(Set.Icc (-4) 4)θ↑(Set.Icc (-4) 4)φ↑(Set.Icc (-4) 4): ↑(Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4)} {wFin 2 → ℚ: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.2 → ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.} (hP‖P‖ ≤ 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1) (approx‖P - toR3 P_‖ ≤ RationalApprox.κ: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).toR3toR3 (v : Fin 3 → ℚ) : Euc(3)Cast a `Fin 3 → ℚ` to an `ℝ³` point.P_Fin 3 → ℚ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ) (hw‖toR2 w‖ = 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.toR2toR2 (v : Fin 2 → ℚ) : Euc(2)Cast a `Fin 2 → ℚ` to an `ℝ²` point.wFin 2 → ℚ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.1) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.innerInner.inner.{u_4, u_5} (𝕜 : Type u_4) {E : Type u_5} [self : Inner 𝕜 E] : E → E → 𝕜The inner product function.ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.((rotRrotR : AddChar ℝ (Euc(2) →L[ℝ] Euc(2))↑↑α↑(Set.Icc (-4) 4)) ((rotMrotM (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑↑θ↑(Set.Icc (-4) 4)↑↑φ↑(Set.Icc (-4) 4)) PEuc(3))) (toR2toR2 (v : Fin 2 → ℚ) : Euc(2)Cast a `Fin 2 → ℚ` to an `ℝ²` point.wFin 2 → ℚ) -HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).↑(dotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.(RationalApprox.rotRℚRationalApprox.rotRℚ (α : ℚ) : (Fin 2 → ℚ) →ₗ[ℚ] Fin 2 → ℚ↑α↑(Set.Icc (-4) 4)) ((RationalApprox.rotMℚRationalApprox.rotMℚ (θ φ : ℚ) : (Fin 3 → ℚ) →ₗ[ℚ] Fin 2 → ℚ↑θ↑(Set.Icc (-4) 4)↑φ↑(Set.Icc (-4) 4)) P_Fin 3 → ℚ) ⬝ᵥdotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.wFin 2 → ℚ)dotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.4 *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.RationalApprox.κRationalApprox.κ : ℝtheorem RationalApprox.bounds_kappa_RM
RationalApprox.bounds_kappa_RM {P : Euc(3)} {P_ : Fin 3 → ℚ} {α θ φ : ↑(Set.Icc (-4) 4)} {w : Fin 2 → ℚ} (hP : ‖P‖ ≤ 1) (approx : ‖P - toR3 P_‖ ≤ RationalApprox.κ) (hw : ‖toR2 w‖ = 1) : ‖inner ℝ ((rotR ↑↑α) ((rotM ↑↑θ ↑↑φ) P)) (toR2 w) - ↑((RationalApprox.rotRℚ ↑α) ((RationalApprox.rotMℚ ↑θ ↑φ) P_) ⬝ᵥ w)‖ ≤ 4 * RationalApprox.κ{PEuc(3): Euc(EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.3)EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.} {P_Fin 3 → ℚ: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.3 → ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.} {α↑(Set.Icc (-4) 4)θ↑(Set.Icc (-4) 4)φ↑(Set.Icc (-4) 4): ↑(Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4)} {wFin 2 → ℚ: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.2 → ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.} (hP‖P‖ ≤ 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1) (approx‖P - toR3 P_‖ ≤ RationalApprox.κ: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).toR3toR3 (v : Fin 3 → ℚ) : Euc(3)Cast a `Fin 3 → ℚ` to an `ℝ³` point.P_Fin 3 → ℚ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ) (hw‖toR2 w‖ = 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.toR2toR2 (v : Fin 2 → ℚ) : Euc(2)Cast a `Fin 2 → ℚ` to an `ℝ²` point.wFin 2 → ℚ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.1) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.innerInner.inner.{u_4, u_5} (𝕜 : Type u_4) {E : Type u_5} [self : Inner 𝕜 E] : E → E → 𝕜The inner product function.ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.((rotRrotR : AddChar ℝ (Euc(2) →L[ℝ] Euc(2))↑↑α↑(Set.Icc (-4) 4)) ((rotMrotM (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑↑θ↑(Set.Icc (-4) 4)↑↑φ↑(Set.Icc (-4) 4)) PEuc(3))) (toR2toR2 (v : Fin 2 → ℚ) : Euc(2)Cast a `Fin 2 → ℚ` to an `ℝ²` point.wFin 2 → ℚ) -HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).↑(dotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.(RationalApprox.rotRℚRationalApprox.rotRℚ (α : ℚ) : (Fin 2 → ℚ) →ₗ[ℚ] Fin 2 → ℚ↑α↑(Set.Icc (-4) 4)) ((RationalApprox.rotMℚRationalApprox.rotMℚ (θ φ : ℚ) : (Fin 3 → ℚ) →ₗ[ℚ] Fin 2 → ℚ↑θ↑(Set.Icc (-4) 4)↑φ↑(Set.Icc (-4) 4)) P_Fin 3 → ℚ) ⬝ᵥdotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.wFin 2 → ℚ)dotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.4 *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.RationalApprox.κRationalApprox.κ : ℝ -
theoremdefined in Noperthedron/RationalApprox/BoundsKappa.leancomplete
theorem RationalApprox.bounds_kappa_R'M
RationalApprox.bounds_kappa_R'M {P : Euc(3)} {P_ : Fin 3 → ℚ} {α θ φ : ↑(Set.Icc (-4) 4)} {w : Fin 2 → ℚ} (hP : ‖P‖ ≤ 1) (approx : ‖P - toR3 P_‖ ≤ RationalApprox.κ) (hw : ‖toR2 w‖ = 1) : ‖inner ℝ ((rotR' ↑↑α) ((rotM ↑↑θ ↑↑φ) P)) (toR2 w) - ↑((RationalApprox.rotR'ℚ ↑α) ((RationalApprox.rotMℚ ↑θ ↑φ) P_) ⬝ᵥ w)‖ ≤ 4 * RationalApprox.κ{PEuc(3): Euc(EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.3)EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.} {P_Fin 3 → ℚ: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.3 → ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.} {α↑(Set.Icc (-4) 4)θ↑(Set.Icc (-4) 4)φ↑(Set.Icc (-4) 4): ↑(Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4)} {wFin 2 → ℚ: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.2 → ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.} (hP‖P‖ ≤ 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1) (approx‖P - toR3 P_‖ ≤ RationalApprox.κ: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).toR3toR3 (v : Fin 3 → ℚ) : Euc(3)Cast a `Fin 3 → ℚ` to an `ℝ³` point.P_Fin 3 → ℚ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ) (hw‖toR2 w‖ = 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.toR2toR2 (v : Fin 2 → ℚ) : Euc(2)Cast a `Fin 2 → ℚ` to an `ℝ²` point.wFin 2 → ℚ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.1) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.innerInner.inner.{u_4, u_5} (𝕜 : Type u_4) {E : Type u_5} [self : Inner 𝕜 E] : E → E → 𝕜The inner product function.ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.((rotR'rotR' (α : ℝ) : Euc(2) →L[ℝ] Euc(2)↑↑α↑(Set.Icc (-4) 4)) ((rotMrotM (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑↑θ↑(Set.Icc (-4) 4)↑↑φ↑(Set.Icc (-4) 4)) PEuc(3))) (toR2toR2 (v : Fin 2 → ℚ) : Euc(2)Cast a `Fin 2 → ℚ` to an `ℝ²` point.wFin 2 → ℚ) -HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).↑(dotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.(RationalApprox.rotR'ℚRationalApprox.rotR'ℚ (α : ℚ) : (Fin 2 → ℚ) →ₗ[ℚ] Fin 2 → ℚ↑α↑(Set.Icc (-4) 4)) ((RationalApprox.rotMℚRationalApprox.rotMℚ (θ φ : ℚ) : (Fin 3 → ℚ) →ₗ[ℚ] Fin 2 → ℚ↑θ↑(Set.Icc (-4) 4)↑φ↑(Set.Icc (-4) 4)) P_Fin 3 → ℚ) ⬝ᵥdotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.wFin 2 → ℚ)dotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.4 *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.RationalApprox.κRationalApprox.κ : ℝtheorem RationalApprox.bounds_kappa_R'M
RationalApprox.bounds_kappa_R'M {P : Euc(3)} {P_ : Fin 3 → ℚ} {α θ φ : ↑(Set.Icc (-4) 4)} {w : Fin 2 → ℚ} (hP : ‖P‖ ≤ 1) (approx : ‖P - toR3 P_‖ ≤ RationalApprox.κ) (hw : ‖toR2 w‖ = 1) : ‖inner ℝ ((rotR' ↑↑α) ((rotM ↑↑θ ↑↑φ) P)) (toR2 w) - ↑((RationalApprox.rotR'ℚ ↑α) ((RationalApprox.rotMℚ ↑θ ↑φ) P_) ⬝ᵥ w)‖ ≤ 4 * RationalApprox.κ{PEuc(3): Euc(EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.3)EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.} {P_Fin 3 → ℚ: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.3 → ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.} {α↑(Set.Icc (-4) 4)θ↑(Set.Icc (-4) 4)φ↑(Set.Icc (-4) 4): ↑(Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4)} {wFin 2 → ℚ: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.2 → ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.} (hP‖P‖ ≤ 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1) (approx‖P - toR3 P_‖ ≤ RationalApprox.κ: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).toR3toR3 (v : Fin 3 → ℚ) : Euc(3)Cast a `Fin 3 → ℚ` to an `ℝ³` point.P_Fin 3 → ℚ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ) (hw‖toR2 w‖ = 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.toR2toR2 (v : Fin 2 → ℚ) : Euc(2)Cast a `Fin 2 → ℚ` to an `ℝ²` point.wFin 2 → ℚ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.1) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.innerInner.inner.{u_4, u_5} (𝕜 : Type u_4) {E : Type u_5} [self : Inner 𝕜 E] : E → E → 𝕜The inner product function.ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.((rotR'rotR' (α : ℝ) : Euc(2) →L[ℝ] Euc(2)↑↑α↑(Set.Icc (-4) 4)) ((rotMrotM (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑↑θ↑(Set.Icc (-4) 4)↑↑φ↑(Set.Icc (-4) 4)) PEuc(3))) (toR2toR2 (v : Fin 2 → ℚ) : Euc(2)Cast a `Fin 2 → ℚ` to an `ℝ²` point.wFin 2 → ℚ) -HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).↑(dotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.(RationalApprox.rotR'ℚRationalApprox.rotR'ℚ (α : ℚ) : (Fin 2 → ℚ) →ₗ[ℚ] Fin 2 → ℚ↑α↑(Set.Icc (-4) 4)) ((RationalApprox.rotMℚRationalApprox.rotMℚ (θ φ : ℚ) : (Fin 3 → ℚ) →ₗ[ℚ] Fin 2 → ℚ↑θ↑(Set.Icc (-4) 4)↑φ↑(Set.Icc (-4) 4)) P_Fin 3 → ℚ) ⬝ᵥdotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.wFin 2 → ℚ)dotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.4 *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.RationalApprox.κRationalApprox.κ : ℝ -
theoremdefined in Noperthedron/RationalApprox/BoundsKappa.leancomplete
theorem RationalApprox.bounds_kappa_RMθ
RationalApprox.bounds_kappa_RMθ {P : Euc(3)} {P_ : Fin 3 → ℚ} {α θ φ : ↑(Set.Icc (-4) 4)} {w : Fin 2 → ℚ} (hP : ‖P‖ ≤ 1) (approx : ‖P - toR3 P_‖ ≤ RationalApprox.κ) (hw : ‖toR2 w‖ = 1) : ‖inner ℝ ((rotR ↑↑α) ((rotMθ ↑↑θ ↑↑φ) P)) (toR2 w) - ↑((RationalApprox.rotRℚ ↑α) ((RationalApprox.rotMθℚ ↑θ ↑φ) P_) ⬝ᵥ w)‖ ≤ 4 * RationalApprox.κ{PEuc(3): Euc(EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.3)EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.} {P_Fin 3 → ℚ: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.3 → ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.} {α↑(Set.Icc (-4) 4)θ↑(Set.Icc (-4) 4)φ↑(Set.Icc (-4) 4): ↑(Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4)} {wFin 2 → ℚ: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.2 → ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.} (hP‖P‖ ≤ 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1) (approx‖P - toR3 P_‖ ≤ RationalApprox.κ: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).toR3toR3 (v : Fin 3 → ℚ) : Euc(3)Cast a `Fin 3 → ℚ` to an `ℝ³` point.P_Fin 3 → ℚ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ) (hw‖toR2 w‖ = 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.toR2toR2 (v : Fin 2 → ℚ) : Euc(2)Cast a `Fin 2 → ℚ` to an `ℝ²` point.wFin 2 → ℚ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.1) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.innerInner.inner.{u_4, u_5} (𝕜 : Type u_4) {E : Type u_5} [self : Inner 𝕜 E] : E → E → 𝕜The inner product function.ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.((rotRrotR : AddChar ℝ (Euc(2) →L[ℝ] Euc(2))↑↑α↑(Set.Icc (-4) 4)) ((rotMθrotMθ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑↑θ↑(Set.Icc (-4) 4)↑↑φ↑(Set.Icc (-4) 4)) PEuc(3))) (toR2toR2 (v : Fin 2 → ℚ) : Euc(2)Cast a `Fin 2 → ℚ` to an `ℝ²` point.wFin 2 → ℚ) -HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).↑(dotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.(RationalApprox.rotRℚRationalApprox.rotRℚ (α : ℚ) : (Fin 2 → ℚ) →ₗ[ℚ] Fin 2 → ℚ↑α↑(Set.Icc (-4) 4)) ((RationalApprox.rotMθℚRationalApprox.rotMθℚ (θ φ : ℚ) : (Fin 3 → ℚ) →ₗ[ℚ] Fin 2 → ℚ↑θ↑(Set.Icc (-4) 4)↑φ↑(Set.Icc (-4) 4)) P_Fin 3 → ℚ) ⬝ᵥdotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.wFin 2 → ℚ)dotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.4 *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.RationalApprox.κRationalApprox.κ : ℝtheorem RationalApprox.bounds_kappa_RMθ
RationalApprox.bounds_kappa_RMθ {P : Euc(3)} {P_ : Fin 3 → ℚ} {α θ φ : ↑(Set.Icc (-4) 4)} {w : Fin 2 → ℚ} (hP : ‖P‖ ≤ 1) (approx : ‖P - toR3 P_‖ ≤ RationalApprox.κ) (hw : ‖toR2 w‖ = 1) : ‖inner ℝ ((rotR ↑↑α) ((rotMθ ↑↑θ ↑↑φ) P)) (toR2 w) - ↑((RationalApprox.rotRℚ ↑α) ((RationalApprox.rotMθℚ ↑θ ↑φ) P_) ⬝ᵥ w)‖ ≤ 4 * RationalApprox.κ{PEuc(3): Euc(EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.3)EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.} {P_Fin 3 → ℚ: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.3 → ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.} {α↑(Set.Icc (-4) 4)θ↑(Set.Icc (-4) 4)φ↑(Set.Icc (-4) 4): ↑(Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4)} {wFin 2 → ℚ: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.2 → ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.} (hP‖P‖ ≤ 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1) (approx‖P - toR3 P_‖ ≤ RationalApprox.κ: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).toR3toR3 (v : Fin 3 → ℚ) : Euc(3)Cast a `Fin 3 → ℚ` to an `ℝ³` point.P_Fin 3 → ℚ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ) (hw‖toR2 w‖ = 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.toR2toR2 (v : Fin 2 → ℚ) : Euc(2)Cast a `Fin 2 → ℚ` to an `ℝ²` point.wFin 2 → ℚ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.1) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.innerInner.inner.{u_4, u_5} (𝕜 : Type u_4) {E : Type u_5} [self : Inner 𝕜 E] : E → E → 𝕜The inner product function.ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.((rotRrotR : AddChar ℝ (Euc(2) →L[ℝ] Euc(2))↑↑α↑(Set.Icc (-4) 4)) ((rotMθrotMθ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑↑θ↑(Set.Icc (-4) 4)↑↑φ↑(Set.Icc (-4) 4)) PEuc(3))) (toR2toR2 (v : Fin 2 → ℚ) : Euc(2)Cast a `Fin 2 → ℚ` to an `ℝ²` point.wFin 2 → ℚ) -HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).↑(dotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.(RationalApprox.rotRℚRationalApprox.rotRℚ (α : ℚ) : (Fin 2 → ℚ) →ₗ[ℚ] Fin 2 → ℚ↑α↑(Set.Icc (-4) 4)) ((RationalApprox.rotMθℚRationalApprox.rotMθℚ (θ φ : ℚ) : (Fin 3 → ℚ) →ₗ[ℚ] Fin 2 → ℚ↑θ↑(Set.Icc (-4) 4)↑φ↑(Set.Icc (-4) 4)) P_Fin 3 → ℚ) ⬝ᵥdotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.wFin 2 → ℚ)dotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.4 *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.RationalApprox.κRationalApprox.κ : ℝ -
theoremdefined in Noperthedron/RationalApprox/BoundsKappa.leancomplete
theorem RationalApprox.bounds_kappa_RMφ
RationalApprox.bounds_kappa_RMφ {P : Euc(3)} {P_ : Fin 3 → ℚ} {α θ φ : ↑(Set.Icc (-4) 4)} {w : Fin 2 → ℚ} (hP : ‖P‖ ≤ 1) (approx : ‖P - toR3 P_‖ ≤ RationalApprox.κ) (hw : ‖toR2 w‖ = 1) : ‖inner ℝ ((rotR ↑↑α) ((rotMφ ↑↑θ ↑↑φ) P)) (toR2 w) - ↑((RationalApprox.rotRℚ ↑α) ((RationalApprox.rotMφℚ ↑θ ↑φ) P_) ⬝ᵥ w)‖ ≤ 4 * RationalApprox.κ{PEuc(3): Euc(EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.3)EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.} {P_Fin 3 → ℚ: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.3 → ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.} {α↑(Set.Icc (-4) 4)θ↑(Set.Icc (-4) 4)φ↑(Set.Icc (-4) 4): ↑(Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4)} {wFin 2 → ℚ: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.2 → ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.} (hP‖P‖ ≤ 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1) (approx‖P - toR3 P_‖ ≤ RationalApprox.κ: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).toR3toR3 (v : Fin 3 → ℚ) : Euc(3)Cast a `Fin 3 → ℚ` to an `ℝ³` point.P_Fin 3 → ℚ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ) (hw‖toR2 w‖ = 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.toR2toR2 (v : Fin 2 → ℚ) : Euc(2)Cast a `Fin 2 → ℚ` to an `ℝ²` point.wFin 2 → ℚ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.1) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.innerInner.inner.{u_4, u_5} (𝕜 : Type u_4) {E : Type u_5} [self : Inner 𝕜 E] : E → E → 𝕜The inner product function.ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.((rotRrotR : AddChar ℝ (Euc(2) →L[ℝ] Euc(2))↑↑α↑(Set.Icc (-4) 4)) ((rotMφrotMφ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑↑θ↑(Set.Icc (-4) 4)↑↑φ↑(Set.Icc (-4) 4)) PEuc(3))) (toR2toR2 (v : Fin 2 → ℚ) : Euc(2)Cast a `Fin 2 → ℚ` to an `ℝ²` point.wFin 2 → ℚ) -HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).↑(dotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.(RationalApprox.rotRℚRationalApprox.rotRℚ (α : ℚ) : (Fin 2 → ℚ) →ₗ[ℚ] Fin 2 → ℚ↑α↑(Set.Icc (-4) 4)) ((RationalApprox.rotMφℚRationalApprox.rotMφℚ (θ φ : ℚ) : (Fin 3 → ℚ) →ₗ[ℚ] Fin 2 → ℚ↑θ↑(Set.Icc (-4) 4)↑φ↑(Set.Icc (-4) 4)) P_Fin 3 → ℚ) ⬝ᵥdotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.wFin 2 → ℚ)dotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.4 *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.RationalApprox.κRationalApprox.κ : ℝtheorem RationalApprox.bounds_kappa_RMφ
RationalApprox.bounds_kappa_RMφ {P : Euc(3)} {P_ : Fin 3 → ℚ} {α θ φ : ↑(Set.Icc (-4) 4)} {w : Fin 2 → ℚ} (hP : ‖P‖ ≤ 1) (approx : ‖P - toR3 P_‖ ≤ RationalApprox.κ) (hw : ‖toR2 w‖ = 1) : ‖inner ℝ ((rotR ↑↑α) ((rotMφ ↑↑θ ↑↑φ) P)) (toR2 w) - ↑((RationalApprox.rotRℚ ↑α) ((RationalApprox.rotMφℚ ↑θ ↑φ) P_) ⬝ᵥ w)‖ ≤ 4 * RationalApprox.κ{PEuc(3): Euc(EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.3)EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.} {P_Fin 3 → ℚ: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.3 → ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.} {α↑(Set.Icc (-4) 4)θ↑(Set.Icc (-4) 4)φ↑(Set.Icc (-4) 4): ↑(Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4)} {wFin 2 → ℚ: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.2 → ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.} (hP‖P‖ ≤ 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1) (approx‖P - toR3 P_‖ ≤ RationalApprox.κ: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).toR3toR3 (v : Fin 3 → ℚ) : Euc(3)Cast a `Fin 3 → ℚ` to an `ℝ³` point.P_Fin 3 → ℚ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ) (hw‖toR2 w‖ = 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.toR2toR2 (v : Fin 2 → ℚ) : Euc(2)Cast a `Fin 2 → ℚ` to an `ℝ²` point.wFin 2 → ℚ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.1) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.innerInner.inner.{u_4, u_5} (𝕜 : Type u_4) {E : Type u_5} [self : Inner 𝕜 E] : E → E → 𝕜The inner product function.ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.((rotRrotR : AddChar ℝ (Euc(2) →L[ℝ] Euc(2))↑↑α↑(Set.Icc (-4) 4)) ((rotMφrotMφ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑↑θ↑(Set.Icc (-4) 4)↑↑φ↑(Set.Icc (-4) 4)) PEuc(3))) (toR2toR2 (v : Fin 2 → ℚ) : Euc(2)Cast a `Fin 2 → ℚ` to an `ℝ²` point.wFin 2 → ℚ) -HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).↑(dotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.(RationalApprox.rotRℚRationalApprox.rotRℚ (α : ℚ) : (Fin 2 → ℚ) →ₗ[ℚ] Fin 2 → ℚ↑α↑(Set.Icc (-4) 4)) ((RationalApprox.rotMφℚRationalApprox.rotMφℚ (θ φ : ℚ) : (Fin 3 → ℚ) →ₗ[ℚ] Fin 2 → ℚ↑θ↑(Set.Icc (-4) 4)↑φ↑(Set.Icc (-4) 4)) P_Fin 3 → ℚ) ⬝ᵥdotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.wFin 2 → ℚ)dotProduct.{v, u_2} {m : Type u_2} {α : Type v} [Fintype m] [Mul α] [AddCommMonoid α] (v w : m → α) : α`dotProduct v w` is the sum of the entrywise products `v i * w i`. See also `dotProductEquiv`.‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.4 *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.RationalApprox.κRationalApprox.κ : ℝ
Using Lemma 7.7 and Corollary 7.6. See polyhedron.without.rupert, Lemma 44.
Let \PPP be a pointsymmetric convex polyhedron with radius \rho =1 and
\widetilde{\PPP} a \kappa-rational approximation. Let \widetilde{S} \in \widetilde{\PPP}.
Further let \epsilon>0 and \thetab_1,\phib_1,\thetab_2,\phib_2,\alphab \in \Q \cap [-4,4].
Let w\in\Q^2 be a unit vector. Denote \Mib \coloneqq M_{\Q}(\thetab_1, \phib_1),
\Miib \coloneqq M_{\Q}(\thetab_2, \phib_2) as well as
\Mib^{\theta} \coloneqq M_{\Q}^\theta(\thetab_1, \phib_1),
\Mib^{\phi} \coloneqq M_{\Q}^\phi(\thetab_1, \phib_1) and analogously for
\Miib^{\theta}, \Miib^{\phi}. Finally set
\begin{align*}
G^{\Q}& \coloneqq \langle R_{\Q}(\alphab) \Mib \widetilde{S},w \rangle - \epsilon\cdot\big(|\langle R_{\Q}'(\alphab) \Mib \widetilde{S},w \rangle|+|\langle R_{\Q}(\alphab) \Mib^\theta \widetilde{S},w \rangle|+|\langle R_{\Q}(\alphab) \Mib^\phi \widetilde{S},w \rangle|\big) \\
& \hspace{11cm}- 9\epsilon^2/2 - 4\kappa ( 1 + 3 \epsilon),\\
H^{\Q}_P & \coloneqq \langle \Miib P,w \rangle + \epsilon\cdot\big(|\langle \Miib^\theta P,w \rangle|+|\langle \Miib^\varphi P,w \rangle|\big) + 2\epsilon^2 + 3\kappa( 1+2\epsilon).
\end{align*}
$$
If G^{\Q}>\max_{P\in \widetilde{\PPP}} H^{\Q}_P then there does not exist a solution to Rupert's condition to \PPP with
(\theta_1,\varphi_1,\theta_2,\varphi_2,\alpha) \in [\thetab_1\pm\epsilon,\phib_1\pm\epsilon,\thetab_2\pm\epsilon,\phib_2\pm\epsilon,\alphab\pm\epsilon].
$$
Lean code for Theorem7.9●1 theorem
Associated Lean declarations
-
theoremdefined in Noperthedron/RationalApprox/RationalGlobal.leancomplete
theorem RationalApprox.GlobalTheorem.rational_global
RationalApprox.GlobalTheorem.rational_global {ι : Type} [Fintype ι] [Nonempty ι] (p : Pose ℚ) (ε : ℚ) (hε : 0 ≤ ε) (poly : GoodPoly ι) (poly_ : Polyhedron ι (Fin 3 → ℚ)) (happrox : RationalApprox.κApproxPoly poly.vertices poly_) (pc : RationalApprox.GlobalTheorem.RationalGlobalTheoremPrecondition poly poly_ happrox p ε) : ¬∃ q ∈ Metric.closedBall p.toReal ↑ε, RupertPose q poly.hull[SY25] Theorem 43{ιType: TypeA type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [FintypeFintype.{u_4} (α : Type u_4) : Type u_4`Fintype α` means that `α` is finite, i.e. there are only finitely many distinct elements of type `α`. The evidence of this is a finset `elems` (a list up to permutation without duplicates), together with a proof that everything of type `α` is in the list.ιType] [NonemptyNonempty.{u} (α : Sort u) : Prop`Nonempty α` is a typeclass that says that `α` is not an empty type, that is, there exists an element in the type. It differs from `Inhabited α` in that `Nonempty α` is a `Prop`, which means that it does not actually carry an element of `α`, only a proof that *there exists* such an element. Given `Nonempty α`, you can construct an element of `α` *nonconstructively* using `Classical.choice`.ιType] (pPose ℚ: PosePose (R : Type) : TypeℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.) (εℚ: ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.) (hε0 ≤ ε: 0 ≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.εℚ) (polyGoodPoly ι: GoodPolyGoodPoly (ι : Type) [Fintype ι] [Nonempty ι] : TypeιType) (poly_Polyhedron ι (Fin 3 → ℚ): PolyhedronPolyhedron (ι X : Type) : TypeA convex polyhedron, given as a finite indexed set of vertices.ιType(FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.3 → ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.)) (happroxRationalApprox.κApproxPoly poly.vertices poly_: RationalApprox.κApproxPolyRationalApprox.κApproxPoly {ι₁ ι₂ : Type} [Fintype ι₁] [Fintype ι₂] (A : Polyhedron ι₁ Euc(3)) (B : Polyhedron ι₂ (Fin 3 → ℚ)) : TypeA real polyhedron A and a rational polyhedron B that is a κ-approximation of A.polyGoodPoly ι.verticesGoodPoly.vertices {ι : Type} [Fintype ι] [Nonempty ι] (self : GoodPoly ι) : Polyhedron ι Euc(3)poly_Polyhedron ι (Fin 3 → ℚ)) (pcRationalApprox.GlobalTheorem.RationalGlobalTheoremPrecondition poly poly_ happrox p ε: RationalApprox.GlobalTheorem.RationalGlobalTheoremPreconditionRationalApprox.GlobalTheorem.RationalGlobalTheoremPrecondition {ι : Type} [Fintype ι] [Nonempty ι] (poly : GoodPoly ι) (poly_ : Polyhedron ι (Fin 3 → ℚ)) (happrox : RationalApprox.κApproxPoly poly.vertices poly_) (p : Pose ℚ) (ε : ℚ) : TypeA compact way of saying "the pose satisfies the rational global theorem precondition at width ε". We require the existence of some inner-shadow vertex S from the polyhedron, and a covector w meant to express the direction we're projecting ℝ² → ℝ to find that S "sticks out too far" compared to all the other outer-shadow vertices P (which the calculation of H iterates over) in the polygon that lies in ℝ².polyGoodPoly ιpoly_Polyhedron ι (Fin 3 → ℚ)happroxRationalApprox.κApproxPoly poly.vertices poly_pPose ℚεℚ) : ¬Not (a : Prop) : Prop`Not p`, or `¬p`, is the negation of `p`. It is defined to be `p → False`, so if your goal is `¬p` you can use `intro h` to turn the goal into `h : p ⊢ False`, and if you have `hn : ¬p` and `h : p` then `hn h : False` and `(hn h).elim` will prove anything. For more information: [Propositional Logic](https://lean-lang.org/theorem_proving_in_lean4/propositions_and_proofs.html#propositional-logic) Conventions for notations in identifiers: * The recommended spelling of `¬` in identifiers is `not`.∃ qPose ℝ∈ Metric.closedBallMetric.closedBall.{u} {α : Type u} [PseudoMetricSpace α] (x : α) (ε : ℝ) : Set α`closedBall x ε` is the set of all points `y` with `dist y x ≤ ε`pPose ℚ.toRealPose.toReal (p : Pose ℚ) : Pose ℝView a `Pose ℚ` as a `Pose ℝ` by `Rat.cast`-ing each component.↑εℚ, RupertPoseRupertPose {P : Type} [PoseLike P] (p : P) (s : Set Euc(3)) : PropA pose `p` demonstrates that a set `s` is rupert if the closure of the `p`-inner-shadow of `s` is a subset of the interior of the `p`-outer-shadow of `s`.qPose ℝpolyGoodPoly ι.hullGoodPoly.hull {ι : Type} [Fintype ι] [Nonempty ι] (poly : GoodPoly ι) : Set Euc(3)theorem RationalApprox.GlobalTheorem.rational_global
RationalApprox.GlobalTheorem.rational_global {ι : Type} [Fintype ι] [Nonempty ι] (p : Pose ℚ) (ε : ℚ) (hε : 0 ≤ ε) (poly : GoodPoly ι) (poly_ : Polyhedron ι (Fin 3 → ℚ)) (happrox : RationalApprox.κApproxPoly poly.vertices poly_) (pc : RationalApprox.GlobalTheorem.RationalGlobalTheoremPrecondition poly poly_ happrox p ε) : ¬∃ q ∈ Metric.closedBall p.toReal ↑ε, RupertPose q poly.hull[SY25] Theorem 43{ιType: TypeA type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [FintypeFintype.{u_4} (α : Type u_4) : Type u_4`Fintype α` means that `α` is finite, i.e. there are only finitely many distinct elements of type `α`. The evidence of this is a finset `elems` (a list up to permutation without duplicates), together with a proof that everything of type `α` is in the list.ιType] [NonemptyNonempty.{u} (α : Sort u) : Prop`Nonempty α` is a typeclass that says that `α` is not an empty type, that is, there exists an element in the type. It differs from `Inhabited α` in that `Nonempty α` is a `Prop`, which means that it does not actually carry an element of `α`, only a proof that *there exists* such an element. Given `Nonempty α`, you can construct an element of `α` *nonconstructively* using `Classical.choice`.ιType] (pPose ℚ: PosePose (R : Type) : TypeℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.) (εℚ: ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.) (hε0 ≤ ε: 0 ≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.εℚ) (polyGoodPoly ι: GoodPolyGoodPoly (ι : Type) [Fintype ι] [Nonempty ι] : TypeιType) (poly_Polyhedron ι (Fin 3 → ℚ): PolyhedronPolyhedron (ι X : Type) : TypeA convex polyhedron, given as a finite indexed set of vertices.ιType(FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.3 → ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.)) (happroxRationalApprox.κApproxPoly poly.vertices poly_: RationalApprox.κApproxPolyRationalApprox.κApproxPoly {ι₁ ι₂ : Type} [Fintype ι₁] [Fintype ι₂] (A : Polyhedron ι₁ Euc(3)) (B : Polyhedron ι₂ (Fin 3 → ℚ)) : TypeA real polyhedron A and a rational polyhedron B that is a κ-approximation of A.polyGoodPoly ι.verticesGoodPoly.vertices {ι : Type} [Fintype ι] [Nonempty ι] (self : GoodPoly ι) : Polyhedron ι Euc(3)poly_Polyhedron ι (Fin 3 → ℚ)) (pcRationalApprox.GlobalTheorem.RationalGlobalTheoremPrecondition poly poly_ happrox p ε: RationalApprox.GlobalTheorem.RationalGlobalTheoremPreconditionRationalApprox.GlobalTheorem.RationalGlobalTheoremPrecondition {ι : Type} [Fintype ι] [Nonempty ι] (poly : GoodPoly ι) (poly_ : Polyhedron ι (Fin 3 → ℚ)) (happrox : RationalApprox.κApproxPoly poly.vertices poly_) (p : Pose ℚ) (ε : ℚ) : TypeA compact way of saying "the pose satisfies the rational global theorem precondition at width ε". We require the existence of some inner-shadow vertex S from the polyhedron, and a covector w meant to express the direction we're projecting ℝ² → ℝ to find that S "sticks out too far" compared to all the other outer-shadow vertices P (which the calculation of H iterates over) in the polygon that lies in ℝ².polyGoodPoly ιpoly_Polyhedron ι (Fin 3 → ℚ)happroxRationalApprox.κApproxPoly poly.vertices poly_pPose ℚεℚ) : ¬Not (a : Prop) : Prop`Not p`, or `¬p`, is the negation of `p`. It is defined to be `p → False`, so if your goal is `¬p` you can use `intro h` to turn the goal into `h : p ⊢ False`, and if you have `hn : ¬p` and `h : p` then `hn h : False` and `(hn h).elim` will prove anything. For more information: [Propositional Logic](https://lean-lang.org/theorem_proving_in_lean4/propositions_and_proofs.html#propositional-logic) Conventions for notations in identifiers: * The recommended spelling of `¬` in identifiers is `not`.∃ qPose ℝ∈ Metric.closedBallMetric.closedBall.{u} {α : Type u} [PseudoMetricSpace α] (x : α) (ε : ℝ) : Set α`closedBall x ε` is the set of all points `y` with `dist y x ≤ ε`pPose ℚ.toRealPose.toReal (p : Pose ℚ) : Pose ℝView a `Pose ℚ` as a `Pose ℝ` by `Rat.cast`-ing each component.↑εℚ, RupertPoseRupertPose {P : Type} [PoseLike P] (p : P) (s : Set Euc(3)) : PropA pose `p` demonstrates that a set `s` is rupert if the closure of the `p`-inner-shadow of `s` is a subset of the interior of the `p`-outer-shadow of `s`.qPose ℝpolyGoodPoly ι.hullGoodPoly.hull {ι : Type} [Fintype ι] [Nonempty ι] (poly : GoodPoly ι) : Set Euc(3)[SY25] Theorem 43
-
Local.Triangle.κSpanning[complete]
Let \theta, \phi \in \Q \cap [-4,4] and M_{\Q} \coloneqq M_{\Q}(\theta, \phi).
Three points \widetilde{P}_1, \widetilde{P}_2, \widetilde{P}_3 \in \Q^3
with \|\widetilde{P}_1\|, \|\widetilde{P}_2\|, \|\widetilde{P}_3\| \leq 1+\kappa
are called \epsilon-\kappa-spanning for (\theta, \phi) if it holds that:
\begin{align*}
\langle R(\pi/2) M_{\Q} \widetilde{P}_1,M_{\Q} \widetilde{P}_{2}\rangle > 2 \epsilon(\sqrt{2} + \epsilon) + 6\kappa,\\
\langle R(\pi/2) M_{\Q} \widetilde{P}_2,M_{\Q} \widetilde{P}_{3}\rangle > 2 \epsilon(\sqrt{2} + \epsilon) + 6\kappa,\\
\langle R(\pi/2) M_{\Q} \widetilde{P}_3,M_{\Q} \widetilde{P}_{1}\rangle > 2 \epsilon(\sqrt{2} + \epsilon) + 6\kappa.
\end{align*}
$$
Lean code for Definition7.10●1 definition
Associated Lean declarations
-
Local.Triangle.κSpanning[complete]
-
Local.Triangle.κSpanning[complete]
-
structuredefined in Noperthedron/RationalApprox/EpsKapSpanning.leancomplete
structure Local.Triangle.κSpanning
Local.Triangle.κSpanning (P : Local.Triangle) (θ φ ε : ℝ) : Prop[SY25] Definition 45. Note that the "+ 1" at the type Fin 3 wraps. We don't include in this definition the constraint that θ, φ ∈ [-4, 4] or that ‖P₁‖, ‖P₂‖, ‖P₃‖ ≤ 1 + κ. If a user of this code wants to impose those, they'll have to separately.(PLocal.Triangle: Local.TriangleLocal.Triangle : Type) (θℝφℝεℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.) : PropThe universe of propositions. `Prop ≡ Sort 0`. Every proposition is propositionally equal to either `True` or `False`.structure Local.Triangle.κSpanning
Local.Triangle.κSpanning (P : Local.Triangle) (θ φ ε : ℝ) : Prop[SY25] Definition 45. Note that the "+ 1" at the type Fin 3 wraps. We don't include in this definition the constraint that θ, φ ∈ [-4, 4] or that ‖P₁‖, ‖P₂‖, ‖P₃‖ ≤ 1 + κ. If a user of this code wants to impose those, they'll have to separately.(PLocal.Triangle: Local.TriangleLocal.Triangle : Type) (θℝφℝεℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.) : PropThe universe of propositions. `Prop ≡ Sort 0`. Every proposition is propositionally equal to either `True` or `False`.[SY25] Definition 45. Note that the "+ 1" at the type Fin 3 wraps. We don't include in this definition the constraint that θ, φ ∈ [-4, 4] or that ‖P₁‖, ‖P₂‖, ‖P₃‖ ≤ 1 + κ. If a user of this code wants to impose those, they'll have to separately.
Fields
pos
0 < ε: 0 <LT.lt.{u} {α : Type u} [self : LT α] : α → α → PropThe less-than relation: `x < y` Conventions for notations in identifiers: * The recommended spelling of `<` in identifiers is `lt`.εℝlt
∀ (i : Fin 3), 2 * ε * (√2 + ε) + 6 * RationalApprox.κ < inner ℝ ((rotR (Real.pi / 2)) ((RationalApprox.rotMℚℝ θ φ) (P i))) ((RationalApprox.rotMℚℝ θ φ) (P (i + 1))): ∀ (iFin 3: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.3), 2 *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.εℝ*HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.(HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.√Real.sqrt (x : ℝ) : ℝThe square root of a real number. This returns 0 for negative inputs. This has notation `√x`. Note that `√x⁻¹` is parsed as `√(x⁻¹)`.2 +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.εℝ)HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.+HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.6 *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.RationalApprox.κRationalApprox.κ : ℝ<LT.lt.{u} {α : Type u} [self : LT α] : α → α → PropThe less-than relation: `x < y` Conventions for notations in identifiers: * The recommended spelling of `<` in identifiers is `lt`.innerInner.inner.{u_4, u_5} (𝕜 : Type u_4) {E : Type u_5} [self : Inner 𝕜 E] : E → E → 𝕜The inner product function.ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.((rotRrotR : AddChar ℝ (Euc(2) →L[ℝ] Euc(2))(HDiv.hDiv.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HDiv α β γ] : α → β → γ`a / b` computes the result of dividing `a` by `b`. The meaning of this notation is type-dependent. * For most types like `Nat`, `Int`, `Rat`, `Real`, `a / 0` is defined to be `0`. * For `Nat`, `a / b` rounds downwards. * For `Int`, `a / b` rounds downwards if `b` is positive or upwards if `b` is negative. It is implemented as `Int.ediv`, the unique function satisfying `a % b + b * (a / b) = a` and `0 ≤ a % b < natAbs b` for `b ≠ 0`. Other rounding conventions are available using the functions `Int.fdiv` (floor rounding) and `Int.tdiv` (truncation rounding). * For `Float`, `a / 0` follows the IEEE 754 semantics for division, usually resulting in `inf` or `nan`. Conventions for notations in identifiers: * The recommended spelling of `/` in identifiers is `div`.Real.piReal.pi : ℝThe number π = 3.14159265... Defined here using choice as twice a zero of cos in [1,2], from which one can derive all its properties. For explicit bounds on π, see `Mathlib/Analysis/Real/Pi/Bounds.lean`. Denoted `π`, once the `Real` namespace is opened./HDiv.hDiv.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HDiv α β γ] : α → β → γ`a / b` computes the result of dividing `a` by `b`. The meaning of this notation is type-dependent. * For most types like `Nat`, `Int`, `Rat`, `Real`, `a / 0` is defined to be `0`. * For `Nat`, `a / b` rounds downwards. * For `Int`, `a / b` rounds downwards if `b` is positive or upwards if `b` is negative. It is implemented as `Int.ediv`, the unique function satisfying `a % b + b * (a / b) = a` and `0 ≤ a % b < natAbs b` for `b ≠ 0`. Other rounding conventions are available using the functions `Int.fdiv` (floor rounding) and `Int.tdiv` (truncation rounding). * For `Float`, `a / 0` follows the IEEE 754 semantics for division, usually resulting in `inf` or `nan`. Conventions for notations in identifiers: * The recommended spelling of `/` in identifiers is `div`.2)HDiv.hDiv.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HDiv α β γ] : α → β → γ`a / b` computes the result of dividing `a` by `b`. The meaning of this notation is type-dependent. * For most types like `Nat`, `Int`, `Rat`, `Real`, `a / 0` is defined to be `0`. * For `Nat`, `a / b` rounds downwards. * For `Int`, `a / b` rounds downwards if `b` is positive or upwards if `b` is negative. It is implemented as `Int.ediv`, the unique function satisfying `a % b + b * (a / b) = a` and `0 ≤ a % b < natAbs b` for `b ≠ 0`. Other rounding conventions are available using the functions `Int.fdiv` (floor rounding) and `Int.tdiv` (truncation rounding). * For `Float`, `a / 0` follows the IEEE 754 semantics for division, usually resulting in `inf` or `nan`. Conventions for notations in identifiers: * The recommended spelling of `/` in identifiers is `div`.) ((RationalApprox.rotMℚℝRationalApprox.rotMℚℝ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)θℝφℝ) (PLocal.TriangleiFin 3))) ((RationalApprox.rotMℚℝRationalApprox.rotMℚℝ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)θℝφℝ) (PLocal.Triangle(HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.iFin 3+HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.1)HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.))
Using Definition 7.10.
Let P_1, P_2, P_3 \in \R^3 with \|P_i\| \leq 1
and \widetilde{P}_1, \widetilde{P}_2, \widetilde{P}_3 \in \Q^3
be their \kappa-rational approximations.
Assume that \widetilde{P}_1, \widetilde{P}_2, \widetilde{P}_3 are
\epsilon-\kappa-spanning for some \theta, \phi \in \Q \cap [-4,4],
then P_1, P_2, P_3 are \epsilon-spanning for \theta, \phi.
Lean code for Lemma7.11●1 theorem
Associated Lean declarations
-
theoremdefined in Noperthedron/RationalApprox/EpsKapSpanning.leancomplete
theorem RationalApprox.ek_spanning_imp_e_spanning
RationalApprox.ek_spanning_imp_e_spanning (P P' : Local.Triangle) (hk : RationalApprox.κApproxTri P P') (hP : ∀ (i : Fin 3), ‖P i‖ ≤ 1) {θ φ ε : ℝ} (hθ : θ ∈ Set.Icc (-4) 4) (hφ : φ ∈ Set.Icc (-4) 4) (hspan : P'.κSpanning θ φ ε) : P.Spanning θ φ ε(PLocal.TriangleP'Local.Triangle: Local.TriangleLocal.Triangle : Type) (hkRationalApprox.κApproxTri P P': RationalApprox.κApproxTriRationalApprox.κApproxTri (A A' : Local.Triangle) : PropPLocal.TriangleP'Local.Triangle) (hP∀ (i : Fin 3), ‖P i‖ ≤ 1: ∀ (iFin 3: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.3), ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PLocal.TriangleiFin 3‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1) {θℝφℝεℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.} (hθθ ∈ Set.Icc (-4) 4: θℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) (hφφ ∈ Set.Icc (-4) 4: φℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) (hspanP'.κSpanning θ φ ε: P'Local.Triangle.κSpanningLocal.Triangle.κSpanning (P : Local.Triangle) (θ φ ε : ℝ) : Prop[SY25] Definition 45. Note that the "+ 1" at the type Fin 3 wraps. We don't include in this definition the constraint that θ, φ ∈ [-4, 4] or that ‖P₁‖, ‖P₂‖, ‖P₃‖ ≤ 1 + κ. If a user of this code wants to impose those, they'll have to separately.θℝφℝεℝ) : PLocal.Triangle.SpanningLocal.Triangle.Spanning (P : Local.Triangle) (θ φ ε : ℝ) : Prop[SY25] Definition 27. Note that the "+ 1" at the type Fin 3 wraps.θℝφℝεℝtheorem RationalApprox.ek_spanning_imp_e_spanning
RationalApprox.ek_spanning_imp_e_spanning (P P' : Local.Triangle) (hk : RationalApprox.κApproxTri P P') (hP : ∀ (i : Fin 3), ‖P i‖ ≤ 1) {θ φ ε : ℝ} (hθ : θ ∈ Set.Icc (-4) 4) (hφ : φ ∈ Set.Icc (-4) 4) (hspan : P'.κSpanning θ φ ε) : P.Spanning θ φ ε(PLocal.TriangleP'Local.Triangle: Local.TriangleLocal.Triangle : Type) (hkRationalApprox.κApproxTri P P': RationalApprox.κApproxTriRationalApprox.κApproxTri (A A' : Local.Triangle) : PropPLocal.TriangleP'Local.Triangle) (hP∀ (i : Fin 3), ‖P i‖ ≤ 1: ∀ (iFin 3: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.3), ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PLocal.TriangleiFin 3‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1) {θℝφℝεℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.} (hθθ ∈ Set.Icc (-4) 4: θℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) (hφφ ∈ Set.Icc (-4) 4: φℝ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) (hspanP'.κSpanning θ φ ε: P'Local.Triangle.κSpanningLocal.Triangle.κSpanning (P : Local.Triangle) (θ φ ε : ℝ) : Prop[SY25] Definition 45. Note that the "+ 1" at the type Fin 3 wraps. We don't include in this definition the constraint that θ, φ ∈ [-4, 4] or that ‖P₁‖, ‖P₂‖, ‖P₃‖ ≤ 1 + κ. If a user of this code wants to impose those, they'll have to separately.θℝφℝεℝ) : PLocal.Triangle.SpanningLocal.Triangle.Spanning (P : Local.Triangle) (θ φ ε : ℝ) : Prop[SY25] Definition 27. Note that the "+ 1" at the type Fin 3 wraps.θℝφℝεℝ
Using Lemma 7.7, Lemma 6.8, and Corollary 7.6. See polyhedron.without.rupert, Lemma 46.
-
RationalApprox.bounds_kappa3_X[complete] -
RationalApprox.bounds_kappa3_M[complete] -
RationalApprox.bounds_kappa3_MQ[complete]
Let P,Q \in \mathbb{R}^3 with \|P\|,\|Q\|\leq 1,
and let \widetilde{P},\widetilde{Q} be \kappa-approximations.
Then, for parameters in [-4,4],
-
|\langle X, P \rangle - \langle X_{\mathbb{Q}}, \widetilde{P} \rangle| \leq 3\kappa -
|\langle MP, MQ \rangle - \langle M_{\mathbb{Q}}\widetilde{P}, M_{\mathbb{Q}}\widetilde{Q} \rangle| \leq 5\kappa -
|\| M Q \| - \| M_{\mathbb{Q}}\widetilde{Q} \| | \leq 3\kappa
Lean code for Lemma7.12●3 theorems
Associated Lean declarations
-
RationalApprox.bounds_kappa3_X[complete]
-
RationalApprox.bounds_kappa3_M[complete]
-
RationalApprox.bounds_kappa3_MQ[complete]
-
RationalApprox.bounds_kappa3_X[complete] -
RationalApprox.bounds_kappa3_M[complete] -
RationalApprox.bounds_kappa3_MQ[complete]
-
theoremdefined in Noperthedron/RationalApprox/BoundsKappa3.leancomplete
theorem RationalApprox.bounds_kappa3_X
RationalApprox.bounds_kappa3_X {P P_ : Euc(3)} {θ φ : ↑(Set.Icc (-4) 4)} (hP : ‖P‖ ≤ 1) (Papprox : ‖P - P_‖ ≤ RationalApprox.κ) : ‖inner ℝ (vecX ↑θ ↑φ) P - inner ℝ (RationalApprox.vecXℚℝ ↑θ ↑φ) P_‖ ≤ 3 * RationalApprox.κ{PEuc(3)P_Euc(3): Euc(EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.3)EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.} {θ↑(Set.Icc (-4) 4)φ↑(Set.Icc (-4) 4): ↑(Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4)} (hP‖P‖ ≤ 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1) (Papprox‖P - P_‖ ≤ RationalApprox.κ: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).P_Euc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.innerInner.inner.{u_4, u_5} (𝕜 : Type u_4) {E : Type u_5} [self : Inner 𝕜 E] : E → E → 𝕜The inner product function.ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.(vecXvecX (θ φ : ℝ) : Euc(3)↑θ↑(Set.Icc (-4) 4)↑φ↑(Set.Icc (-4) 4)) PEuc(3)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).innerInner.inner.{u_4, u_5} (𝕜 : Type u_4) {E : Type u_5} [self : Inner 𝕜 E] : E → E → 𝕜The inner product function.ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.(RationalApprox.vecXℚℝRationalApprox.vecXℚℝ (θ φ : ℝ) : Euc(3)↑θ↑(Set.Icc (-4) 4)↑φ↑(Set.Icc (-4) 4)) P_Euc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.3 *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.RationalApprox.κRationalApprox.κ : ℝtheorem RationalApprox.bounds_kappa3_X
RationalApprox.bounds_kappa3_X {P P_ : Euc(3)} {θ φ : ↑(Set.Icc (-4) 4)} (hP : ‖P‖ ≤ 1) (Papprox : ‖P - P_‖ ≤ RationalApprox.κ) : ‖inner ℝ (vecX ↑θ ↑φ) P - inner ℝ (RationalApprox.vecXℚℝ ↑θ ↑φ) P_‖ ≤ 3 * RationalApprox.κ{PEuc(3)P_Euc(3): Euc(EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.3)EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.} {θ↑(Set.Icc (-4) 4)φ↑(Set.Icc (-4) 4): ↑(Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4)} (hP‖P‖ ≤ 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1) (Papprox‖P - P_‖ ≤ RationalApprox.κ: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).P_Euc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.innerInner.inner.{u_4, u_5} (𝕜 : Type u_4) {E : Type u_5} [self : Inner 𝕜 E] : E → E → 𝕜The inner product function.ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.(vecXvecX (θ φ : ℝ) : Euc(3)↑θ↑(Set.Icc (-4) 4)↑φ↑(Set.Icc (-4) 4)) PEuc(3)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).innerInner.inner.{u_4, u_5} (𝕜 : Type u_4) {E : Type u_5} [self : Inner 𝕜 E] : E → E → 𝕜The inner product function.ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.(RationalApprox.vecXℚℝRationalApprox.vecXℚℝ (θ φ : ℝ) : Euc(3)↑θ↑(Set.Icc (-4) 4)↑φ↑(Set.Icc (-4) 4)) P_Euc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.3 *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.RationalApprox.κRationalApprox.κ : ℝ -
theoremdefined in Noperthedron/RationalApprox/BoundsKappa3.leancomplete
theorem RationalApprox.bounds_kappa3_M
RationalApprox.bounds_kappa3_M {P Q Q_ P_ : Euc(3)} {θ φ : ↑(Set.Icc (-4) 4)} (hP : ‖P‖ ≤ 1) (hQ : ‖Q‖ ≤ 1) (Papprox : ‖P - P_‖ ≤ RationalApprox.κ) (Qapprox : ‖Q - Q_‖ ≤ RationalApprox.κ) : ‖inner ℝ ((rotM ↑θ ↑φ) P) ((rotM ↑θ ↑φ) Q) - inner ℝ ((RationalApprox.rotMℚℝ ↑θ ↑φ) P_) ((RationalApprox.rotMℚℝ ↑θ ↑φ) Q_)‖ ≤ 5 * RationalApprox.κ{PEuc(3)QEuc(3)Q_Euc(3)P_Euc(3): Euc(EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.3)EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.} {θ↑(Set.Icc (-4) 4)φ↑(Set.Icc (-4) 4): ↑(Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4)} (hP‖P‖ ≤ 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1) (hQ‖Q‖ ≤ 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.QEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1) (Papprox‖P - P_‖ ≤ RationalApprox.κ: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).P_Euc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ) (Qapprox‖Q - Q_‖ ≤ RationalApprox.κ: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.QEuc(3)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).Q_Euc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.innerInner.inner.{u_4, u_5} (𝕜 : Type u_4) {E : Type u_5} [self : Inner 𝕜 E] : E → E → 𝕜The inner product function.ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.((rotMrotM (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑θ↑(Set.Icc (-4) 4)↑φ↑(Set.Icc (-4) 4)) PEuc(3)) ((rotMrotM (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑θ↑(Set.Icc (-4) 4)↑φ↑(Set.Icc (-4) 4)) QEuc(3)) -HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).innerInner.inner.{u_4, u_5} (𝕜 : Type u_4) {E : Type u_5} [self : Inner 𝕜 E] : E → E → 𝕜The inner product function.ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.((RationalApprox.rotMℚℝRationalApprox.rotMℚℝ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑θ↑(Set.Icc (-4) 4)↑φ↑(Set.Icc (-4) 4)) P_Euc(3)) ((RationalApprox.rotMℚℝRationalApprox.rotMℚℝ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑θ↑(Set.Icc (-4) 4)↑φ↑(Set.Icc (-4) 4)) Q_Euc(3))‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.5 *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.RationalApprox.κRationalApprox.κ : ℝtheorem RationalApprox.bounds_kappa3_M
RationalApprox.bounds_kappa3_M {P Q Q_ P_ : Euc(3)} {θ φ : ↑(Set.Icc (-4) 4)} (hP : ‖P‖ ≤ 1) (hQ : ‖Q‖ ≤ 1) (Papprox : ‖P - P_‖ ≤ RationalApprox.κ) (Qapprox : ‖Q - Q_‖ ≤ RationalApprox.κ) : ‖inner ℝ ((rotM ↑θ ↑φ) P) ((rotM ↑θ ↑φ) Q) - inner ℝ ((RationalApprox.rotMℚℝ ↑θ ↑φ) P_) ((RationalApprox.rotMℚℝ ↑θ ↑φ) Q_)‖ ≤ 5 * RationalApprox.κ{PEuc(3)QEuc(3)Q_Euc(3)P_Euc(3): Euc(EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.3)EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.} {θ↑(Set.Icc (-4) 4)φ↑(Set.Icc (-4) 4): ↑(Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4)} (hP‖P‖ ≤ 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1) (hQ‖Q‖ ≤ 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.QEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1) (Papprox‖P - P_‖ ≤ RationalApprox.κ: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).P_Euc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ) (Qapprox‖Q - Q_‖ ≤ RationalApprox.κ: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.QEuc(3)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).Q_Euc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ) : ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.innerInner.inner.{u_4, u_5} (𝕜 : Type u_4) {E : Type u_5} [self : Inner 𝕜 E] : E → E → 𝕜The inner product function.ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.((rotMrotM (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑θ↑(Set.Icc (-4) 4)↑φ↑(Set.Icc (-4) 4)) PEuc(3)) ((rotMrotM (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑θ↑(Set.Icc (-4) 4)↑φ↑(Set.Icc (-4) 4)) QEuc(3)) -HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).innerInner.inner.{u_4, u_5} (𝕜 : Type u_4) {E : Type u_5} [self : Inner 𝕜 E] : E → E → 𝕜The inner product function.ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.((RationalApprox.rotMℚℝRationalApprox.rotMℚℝ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑θ↑(Set.Icc (-4) 4)↑φ↑(Set.Icc (-4) 4)) P_Euc(3)) ((RationalApprox.rotMℚℝRationalApprox.rotMℚℝ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑θ↑(Set.Icc (-4) 4)↑φ↑(Set.Icc (-4) 4)) Q_Euc(3))‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.5 *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.RationalApprox.κRationalApprox.κ : ℝ -
theoremdefined in Noperthedron/RationalApprox/BoundsKappa3.leancomplete
theorem RationalApprox.bounds_kappa3_MQ
RationalApprox.bounds_kappa3_MQ {Q Q_ : Euc(3)} {θ φ : ↑(Set.Icc (-4) 4)} (hQ : ‖Q‖ ≤ 1) (Qapprox : ‖Q - Q_‖ ≤ RationalApprox.κ) : |‖(rotM ↑θ ↑φ) Q‖ - ‖(RationalApprox.rotMℚℝ ↑θ ↑φ) Q_‖| ≤ 3 * RationalApprox.κ{QEuc(3)Q_Euc(3): Euc(EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.3)EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.} {θ↑(Set.Icc (-4) 4)φ↑(Set.Icc (-4) 4): ↑(Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4)} (hQ‖Q‖ ≤ 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.QEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1) (Qapprox‖Q - Q_‖ ≤ RationalApprox.κ: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.QEuc(3)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).Q_Euc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ) : |abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.(rotMrotM (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑θ↑(Set.Icc (-4) 4)↑φ↑(Set.Icc (-4) 4)) QEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.(RationalApprox.rotMℚℝRationalApprox.rotMℚℝ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑θ↑(Set.Icc (-4) 4)↑φ↑(Set.Icc (-4) 4)) Q_Euc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.|abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.3 *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.RationalApprox.κRationalApprox.κ : ℝtheorem RationalApprox.bounds_kappa3_MQ
RationalApprox.bounds_kappa3_MQ {Q Q_ : Euc(3)} {θ φ : ↑(Set.Icc (-4) 4)} (hQ : ‖Q‖ ≤ 1) (Qapprox : ‖Q - Q_‖ ≤ RationalApprox.κ) : |‖(rotM ↑θ ↑φ) Q‖ - ‖(RationalApprox.rotMℚℝ ↑θ ↑φ) Q_‖| ≤ 3 * RationalApprox.κ{QEuc(3)Q_Euc(3): Euc(EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.3)EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.} {θ↑(Set.Icc (-4) 4)φ↑(Set.Icc (-4) 4): ↑(Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4)} (hQ‖Q‖ ≤ 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.QEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1) (Qapprox‖Q - Q_‖ ≤ RationalApprox.κ: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.QEuc(3)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).Q_Euc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ) : |abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.(rotMrotM (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑θ↑(Set.Icc (-4) 4)↑φ↑(Set.Icc (-4) 4)) QEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.(RationalApprox.rotMℚℝRationalApprox.rotMℚℝ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑θ↑(Set.Icc (-4) 4)↑φ↑(Set.Icc (-4) 4)) Q_Euc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.|abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.3 *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.RationalApprox.κRationalApprox.κ : ℝ
Using Lemma 7.7. See polyhedron.without.rupert, Lemma 49.
-
RationalApprox.delta_kappa[complete]
Let P, Q \in \R^3 with \|P\|, \|Q\| \leq 1 and
\widetilde{Q} a \kappa-rational approximation of Q.
Let \alpha, \theta, \phi, \thetab, \phib \in [-4,4] and set
M = M(\theta, \phi), M_{\Q} = M_{\Q}(\theta, \phi),
\overline{M} = M(\thetab, \phib), \overline{M}_{\Q} = M_{\Q}(\thetab, \phib).
Then
\big|\|R(\alpha) M P - \overline{M} Q\|- \| R_{\Q}(\alpha) M_{\Q} P - \overline{M}_{\Q} \widetilde{Q}\| \big| \leq 6 \kappa
Note that the rational side uses P directly (not a rational approximation \widetilde{P}).
Lean code for Corollary7.13●1 theorem
Associated Lean declarations
-
RationalApprox.delta_kappa[complete]
-
RationalApprox.delta_kappa[complete]
-
theoremdefined in Noperthedron/RationalApprox/DeltaKappa.leancomplete
theorem RationalApprox.delta_kappa
RationalApprox.delta_kappa {P Q Q_ : Euc(3)} {α θ φ θ_ φ_ : ↑(Set.Icc (-4) 4)} (hP : ‖P‖ ≤ 1) (hQ : ‖Q‖ ≤ 1) (Qapprox : ‖Q - Q_‖ ≤ RationalApprox.κ) : |‖(rotR ↑α) ((rotM ↑θ ↑φ) P) - (rotM ↑θ_ ↑φ_) Q‖ - ‖(RationalApprox.rotRℚℝ ↑α) ((RationalApprox.rotMℚℝ ↑θ ↑φ) P) - (RationalApprox.rotMℚℝ ↑θ_ ↑φ_) Q_‖| ≤ 6 * RationalApprox.κ{PEuc(3)QEuc(3)Q_Euc(3): Euc(EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.3)EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.} {α↑(Set.Icc (-4) 4)θ↑(Set.Icc (-4) 4)φ↑(Set.Icc (-4) 4)θ_↑(Set.Icc (-4) 4)φ_↑(Set.Icc (-4) 4): ↑(Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4)} (hP‖P‖ ≤ 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1) (hQ‖Q‖ ≤ 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.QEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1) (Qapprox‖Q - Q_‖ ≤ RationalApprox.κ: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.QEuc(3)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).Q_Euc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ) : |abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.(rotRrotR : AddChar ℝ (Euc(2) →L[ℝ] Euc(2))↑α↑(Set.Icc (-4) 4)) ((rotMrotM (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑θ↑(Set.Icc (-4) 4)↑φ↑(Set.Icc (-4) 4)) PEuc(3)) -HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).(rotMrotM (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑θ_↑(Set.Icc (-4) 4)↑φ_↑(Set.Icc (-4) 4)) QEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.(RationalApprox.rotRℚℝRationalApprox.rotRℚℝ (α : ℝ) : Euc(2) →L[ℝ] Euc(2)↑α↑(Set.Icc (-4) 4)) ((RationalApprox.rotMℚℝRationalApprox.rotMℚℝ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑θ↑(Set.Icc (-4) 4)↑φ↑(Set.Icc (-4) 4)) PEuc(3)) -HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).(RationalApprox.rotMℚℝRationalApprox.rotMℚℝ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑θ_↑(Set.Icc (-4) 4)↑φ_↑(Set.Icc (-4) 4)) Q_Euc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.|abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.6 *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.RationalApprox.κRationalApprox.κ : ℝtheorem RationalApprox.delta_kappa
RationalApprox.delta_kappa {P Q Q_ : Euc(3)} {α θ φ θ_ φ_ : ↑(Set.Icc (-4) 4)} (hP : ‖P‖ ≤ 1) (hQ : ‖Q‖ ≤ 1) (Qapprox : ‖Q - Q_‖ ≤ RationalApprox.κ) : |‖(rotR ↑α) ((rotM ↑θ ↑φ) P) - (rotM ↑θ_ ↑φ_) Q‖ - ‖(RationalApprox.rotRℚℝ ↑α) ((RationalApprox.rotMℚℝ ↑θ ↑φ) P) - (RationalApprox.rotMℚℝ ↑θ_ ↑φ_) Q_‖| ≤ 6 * RationalApprox.κ{PEuc(3)QEuc(3)Q_Euc(3): Euc(EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.3)EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.} {α↑(Set.Icc (-4) 4)θ↑(Set.Icc (-4) 4)φ↑(Set.Icc (-4) 4)θ_↑(Set.Icc (-4) 4)φ_↑(Set.Icc (-4) 4): ↑(Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4)} (hP‖P‖ ≤ 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1) (hQ‖Q‖ ≤ 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.QEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1) (Qapprox‖Q - Q_‖ ≤ RationalApprox.κ: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.QEuc(3)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).Q_Euc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ) : |abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.(rotRrotR : AddChar ℝ (Euc(2) →L[ℝ] Euc(2))↑α↑(Set.Icc (-4) 4)) ((rotMrotM (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑θ↑(Set.Icc (-4) 4)↑φ↑(Set.Icc (-4) 4)) PEuc(3)) -HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).(rotMrotM (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑θ_↑(Set.Icc (-4) 4)↑φ_↑(Set.Icc (-4) 4)) QEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.(RationalApprox.rotRℚℝRationalApprox.rotRℚℝ (α : ℝ) : Euc(2) →L[ℝ] Euc(2)↑α↑(Set.Icc (-4) 4)) ((RationalApprox.rotMℚℝRationalApprox.rotMℚℝ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑θ↑(Set.Icc (-4) 4)↑φ↑(Set.Icc (-4) 4)) PEuc(3)) -HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).(RationalApprox.rotMℚℝRationalApprox.rotMℚℝ (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑θ_↑(Set.Icc (-4) 4)↑φ_↑(Set.Icc (-4) 4)) Q_Euc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.|abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α`abs a`, denoted `|a|`, is the absolute value of `a`≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.6 *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.RationalApprox.κRationalApprox.κ : ℝ
See polyhedron.without.rupert, Corollary 50.
-
RationalApprox.bounds_kappa4[complete]
In the setting of Lemma 7.12, let \sqrt[+]{x} be an upper square-root function, i.e.,
\sqrt{x} \leq \sqrt[+]{x} for all real x \geq 0 with rational output on rational input.
Set \|x\|_{+} \coloneqq \sqrt[+]{\|x\|^2}.
Set
A = \frac{\langle M P, M(P-Q)\rangle - 2 \epsilon \|P-Q\| \cdot (\sqrt{2}+\varepsilon)}{ \big(\| M P\|+\sqrt{2} \varepsilon \big) \cdot \big(\|M(P-Q)\|+2 \sqrt{2} \varepsilon\big)}
$$
as well as
A_{\Q} = \frac{\langle M_{\Q} \widetilde{P}, M_{\Q} (\widetilde{P}-\widetilde{Q})\rangle - 10\kappa - 2 \epsilon ( \|\widetilde{P}-\widetilde{Q}\| + 2 \kappa ) \cdot (\sqrt{2}+\varepsilon)}{ \big(\| M_{\Q} \widetilde{P}\|_{+}+\sqrt{2} \varepsilon + 3\kappa \big) \cdot \big(\|M_{\Q}(\widetilde{P}-\widetilde{Q})\|_{+}+2 \sqrt{2} \varepsilon + 6\kappa\big)}.
$$
Assume that A \geq 0.
Then A \geq A_{\mathbb{Q}}.
Lean code for Corollary7.14●1 theorem
Associated Lean declarations
-
RationalApprox.bounds_kappa4[complete]
-
RationalApprox.bounds_kappa4[complete]
-
theoremdefined in Noperthedron/RationalApprox/BoundsKappa4.leancomplete
theorem RationalApprox.bounds_kappa4
RationalApprox.bounds_kappa4 (P Q : Euc(3)) (P_ Q_ : Fin 3 → ℚ) (p : Pose ℚ) (hθBound : ↑p.θ₂ ∈ Set.Icc (-4) 4) (hφBound : ↑p.φ₂ ∈ Set.Icc (-4) 4) (hP : ‖P‖ ≤ 1) (hQ : ‖Q‖ ≤ 1) (Papprox : ‖P - toR3 P_‖ ≤ RationalApprox.κ) (Qapprox : ‖Q - toR3 Q_‖ ≤ RationalApprox.κ) (ε : ℝ) (hε : 0 < ε) (s : RationalApprox.UpperSqrt) (hA_nonneg : 0 ≤ inner ℝ ((rotM ↑p.θ₂ ↑p.φ₂) P) ((rotM ↑p.θ₂ ↑p.φ₂) (P - Q)) - 2 * ε * ‖P - Q‖ * (√2 + ε)) : RationalApprox.bounds_kappa4_Aℚ P_ Q_ p ε s ≤ RationalApprox.bounds_kappa4_A P Q ⟨↑p.θ₂, hθBound⟩ ⟨↑p.φ₂, hφBound⟩ ε[SY25] Corollary 51(PEuc(3)QEuc(3): Euc(EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.3)EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.) (P_Fin 3 → ℚQ_Fin 3 → ℚ: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.3 → ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.) (pPose ℚ: PosePose (R : Type) : TypeℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.) (hθBound↑p.θ₂ ∈ Set.Icc (-4) 4: ↑pPose ℚ.θ₂Pose.θ₂ {R : Type} (self : Pose R) : R∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) (hφBound↑p.φ₂ ∈ Set.Icc (-4) 4: ↑pPose ℚ.φ₂Pose.φ₂ {R : Type} (self : Pose R) : R∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) (hP‖P‖ ≤ 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1) (hQ‖Q‖ ≤ 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.QEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1) (Papprox‖P - toR3 P_‖ ≤ RationalApprox.κ: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).toR3toR3 (v : Fin 3 → ℚ) : Euc(3)Cast a `Fin 3 → ℚ` to an `ℝ³` point.P_Fin 3 → ℚ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ) (Qapprox‖Q - toR3 Q_‖ ≤ RationalApprox.κ: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.QEuc(3)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).toR3toR3 (v : Fin 3 → ℚ) : Euc(3)Cast a `Fin 3 → ℚ` to an `ℝ³` point.Q_Fin 3 → ℚ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ) (εℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.) (hε0 < ε: 0 <LT.lt.{u} {α : Type u} [self : LT α] : α → α → PropThe less-than relation: `x < y` Conventions for notations in identifiers: * The recommended spelling of `<` in identifiers is `lt`.εℝ) (sRationalApprox.UpperSqrt: RationalApprox.UpperSqrtRationalApprox.UpperSqrt : Type) (hA_nonneg0 ≤ inner ℝ ((rotM ↑p.θ₂ ↑p.φ₂) P) ((rotM ↑p.θ₂ ↑p.φ₂) (P - Q)) - 2 * ε * ‖P - Q‖ * (√2 + ε): 0 ≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.innerInner.inner.{u_4, u_5} (𝕜 : Type u_4) {E : Type u_5} [self : Inner 𝕜 E] : E → E → 𝕜The inner product function.ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.((rotMrotM (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑pPose ℚ.θ₂Pose.θ₂ {R : Type} (self : Pose R) : R↑pPose ℚ.φ₂Pose.φ₂ {R : Type} (self : Pose R) : R) PEuc(3)) ((rotMrotM (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑pPose ℚ.θ₂Pose.θ₂ {R : Type} (self : Pose R) : R↑pPose ℚ.φ₂Pose.φ₂ {R : Type} (self : Pose R) : R) (HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).PEuc(3)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).QEuc(3))HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).) -HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).2 *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.εℝ*HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).QEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.*HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.(HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.√Real.sqrt (x : ℝ) : ℝThe square root of a real number. This returns 0 for negative inputs. This has notation `√x`. Note that `√x⁻¹` is parsed as `√(x⁻¹)`.2 +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.εℝ)HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.) : RationalApprox.bounds_kappa4_AℚRationalApprox.bounds_kappa4_Aℚ (P_ Q_ : Fin 3 → ℚ) (p : Pose ℚ) (ε : ℝ) (s : RationalApprox.UpperSqrt) : ℝP_Fin 3 → ℚQ_Fin 3 → ℚpPose ℚεℝsRationalApprox.UpperSqrt≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.bounds_kappa4_ARationalApprox.bounds_kappa4_A (P Q : Euc(3)) (θ φ : ↑(Set.Icc (-4) 4)) (ε : ℝ) : ℝPEuc(3)QEuc(3)⟨Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p↑pPose ℚ.θ₂Pose.θ₂ {R : Type} (self : Pose R) : R,Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype phθBound↑p.θ₂ ∈ Set.Icc (-4) 4⟩Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p⟨Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p↑pPose ℚ.φ₂Pose.φ₂ {R : Type} (self : Pose R) : R,Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype phφBound↑p.φ₂ ∈ Set.Icc (-4) 4⟩Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype pεℝtheorem RationalApprox.bounds_kappa4
RationalApprox.bounds_kappa4 (P Q : Euc(3)) (P_ Q_ : Fin 3 → ℚ) (p : Pose ℚ) (hθBound : ↑p.θ₂ ∈ Set.Icc (-4) 4) (hφBound : ↑p.φ₂ ∈ Set.Icc (-4) 4) (hP : ‖P‖ ≤ 1) (hQ : ‖Q‖ ≤ 1) (Papprox : ‖P - toR3 P_‖ ≤ RationalApprox.κ) (Qapprox : ‖Q - toR3 Q_‖ ≤ RationalApprox.κ) (ε : ℝ) (hε : 0 < ε) (s : RationalApprox.UpperSqrt) (hA_nonneg : 0 ≤ inner ℝ ((rotM ↑p.θ₂ ↑p.φ₂) P) ((rotM ↑p.θ₂ ↑p.φ₂) (P - Q)) - 2 * ε * ‖P - Q‖ * (√2 + ε)) : RationalApprox.bounds_kappa4_Aℚ P_ Q_ p ε s ≤ RationalApprox.bounds_kappa4_A P Q ⟨↑p.θ₂, hθBound⟩ ⟨↑p.φ₂, hφBound⟩ ε[SY25] Corollary 51(PEuc(3)QEuc(3): Euc(EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.3)EuclideanSpace.{u_7, u_8} (𝕜 : Type u_7) (n : Type u_8) : Type (max u_7 u_8)The standard real/complex Euclidean space, functions on a finite type. For an `n`-dimensional space use `EuclideanSpace 𝕜 (Fin n)`. For the case when `n = Fin _`, there is `!₂[x, y, ...]` notation for building elements of this type, analogous to `![x, y, ...]` notation.) (P_Fin 3 → ℚQ_Fin 3 → ℚ: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.3 → ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.) (pPose ℚ: PosePose (R : Type) : TypeℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.) (hθBound↑p.θ₂ ∈ Set.Icc (-4) 4: ↑pPose ℚ.θ₂Pose.θ₂ {R : Type} (self : Pose R) : R∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) (hφBound↑p.φ₂ ∈ Set.Icc (-4) 4: ↑pPose ℚ.φ₂Pose.φ₂ {R : Type} (self : Pose R) : R∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Set.IccSet.Icc.{u_1} {α : Type u_1} [Preorder α] (a b : α) : Set α`Icc a b` is the left-closed right-closed interval $[a, b]$.(-4) 4) (hP‖P‖ ≤ 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1) (hQ‖Q‖ ≤ 1: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.QEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.1) (Papprox‖P - toR3 P_‖ ≤ RationalApprox.κ: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).toR3toR3 (v : Fin 3 → ℚ) : Euc(3)Cast a `Fin 3 → ℚ` to an `ℝ³` point.P_Fin 3 → ℚ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ) (Qapprox‖Q - toR3 Q_‖ ≤ RationalApprox.κ: ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.QEuc(3)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).toR3toR3 (v : Fin 3 → ℚ) : Euc(3)Cast a `Fin 3 → ℚ` to an `ℝ³` point.Q_Fin 3 → ℚ‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.κRationalApprox.κ : ℝ) (εℝ: ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.) (hε0 < ε: 0 <LT.lt.{u} {α : Type u} [self : LT α] : α → α → PropThe less-than relation: `x < y` Conventions for notations in identifiers: * The recommended spelling of `<` in identifiers is `lt`.εℝ) (sRationalApprox.UpperSqrt: RationalApprox.UpperSqrtRationalApprox.UpperSqrt : Type) (hA_nonneg0 ≤ inner ℝ ((rotM ↑p.θ₂ ↑p.φ₂) P) ((rotM ↑p.θ₂ ↑p.φ₂) (P - Q)) - 2 * ε * ‖P - Q‖ * (√2 + ε): 0 ≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.innerInner.inner.{u_4, u_5} (𝕜 : Type u_4) {E : Type u_5} [self : Inner 𝕜 E] : E → E → 𝕜The inner product function.ℝReal : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational numbers.((rotMrotM (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑pPose ℚ.θ₂Pose.θ₂ {R : Type} (self : Pose R) : R↑pPose ℚ.φ₂Pose.φ₂ {R : Type} (self : Pose R) : R) PEuc(3)) ((rotMrotM (θ φ : ℝ) : Euc(3) →L[ℝ] Euc(2)↑pPose ℚ.θ₂Pose.θ₂ {R : Type} (self : Pose R) : R↑pPose ℚ.φ₂Pose.φ₂ {R : Type} (self : Pose R) : R) (HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).PEuc(3)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).QEuc(3))HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).) -HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).2 *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.εℝ*HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.PEuc(3)-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).QEuc(3)‖Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝthe `ℝ`-valued norm function.*HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.(HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.√Real.sqrt (x : ℝ) : ℝThe square root of a real number. This returns 0 for negative inputs. This has notation `√x`. Note that `√x⁻¹` is parsed as `√(x⁻¹)`.2 +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.εℝ)HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.) : RationalApprox.bounds_kappa4_AℚRationalApprox.bounds_kappa4_Aℚ (P_ Q_ : Fin 3 → ℚ) (p : Pose ℚ) (ε : ℝ) (s : RationalApprox.UpperSqrt) : ℝP_Fin 3 → ℚQ_Fin 3 → ℚpPose ℚεℝsRationalApprox.UpperSqrt≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`.RationalApprox.bounds_kappa4_ARationalApprox.bounds_kappa4_A (P Q : Euc(3)) (θ φ : ↑(Set.Icc (-4) 4)) (ε : ℝ) : ℝPEuc(3)QEuc(3)⟨Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p↑pPose ℚ.θ₂Pose.θ₂ {R : Type} (self : Pose R) : R,Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype phθBound↑p.θ₂ ∈ Set.Icc (-4) 4⟩Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p⟨Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p↑pPose ℚ.φ₂Pose.φ₂ {R : Type} (self : Pose R) : R,Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype phφBound↑p.φ₂ ∈ Set.Icc (-4) 4⟩Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype pεℝ[SY25] Corollary 51
See polyhedron.without.rupert, Corollary 51.
Let \PPP be a polyhedron with radius \rho=1 and \widetilde{P}_i be a \kappa-rational approximation of P_i \in \PPP.
Set \widetilde{\PPP} = \{\widetilde{P}_i \text{ for } P_i \in \PPP \}.
Let P_1, P_2, P_3, Q_1, Q_2, Q_3 \in \PPP be not necessarily distinct and assume that
P_1, P_2, P_3 and Q_1, Q_2, Q_3 are congruent.
Let \epsilon>0 and \thetab_1,\phib_1,\thetab_2,\phib_2,\alphab \in \Q \cap [-4,4].
Set \Xib \coloneqq X_{\Q}(\thetab_1,\phib_1), \Xiib \coloneqq X_{\Q}(\thetab_2,\phib_2) as well as
\Mib \coloneqq M_{\Q}(\thetab_1,\phib_1), \Miib \coloneqq M_{\Q}(\thetab_2,\phib_2).
Assume that there exist \sigma_P, \sigma_Q \in \{0,1\} such that
(-1)^{\sigma_P} \langle \Xib,\widetilde{P}_i\rangle>\sqrt{2}\varepsilon + 3\kappa \quad \text{and} \quad
(-1)^{\sigma_Q} \langle \Xiib , \widetilde{Q}_i\rangle>\sqrt{2}\varepsilon + 3\kappa,
$$
for all i=1,2,3.
Moreover, assume that \widetilde{P}_1,\widetilde{P}_2,\widetilde{P}_3 are \epsilon-\kappa-spanning for (\thetab_1,\phib_1) and that
\widetilde{Q}_1,\widetilde{Q}_2,\widetilde{Q}_3 are \epsilon-\kappa-spanning for (\thetab_2,\phib_2).
Let \sqrt[+]{x} and \sqrt[-]{x} be upper- and lower-square-root functions, then set
\|Z\|_{+} \coloneqq \sqrt[+]{\|Z\|^2} and \|Z\|_{-} \coloneqq \sqrt[-]{\|Z\|^2} for Z \in \R^n.
Finally, assume that for all i = 1,2,3 and any \widetilde{Q}_j \in \widetilde{\PPP} \setminus \widetilde{Q}_i it holds that the rational inequality (B^{\Q}_\epsilon) from the paper is satisfied, for some r >0
such that \min_{i=1,2,3}\| \Miib \widetilde{Q}_i \|_{-} > r + \sqrt{2} \epsilon + 3\kappa and for some \delta \in \R
with
\delta \geq \max_{i=1,2,3}\left\|R_{\Q}(\alphab) \Mib \widetilde{P}_i-\Miib \widetilde{Q}_i\right\|_{+}/2 + 3\kappa.
$$
Then there exists no solution to Rupert's problem R(\alpha) M(\theta_1,\phi_1)\PPP \subset M(\theta_2,\phi_2)\PPP^\circ with
(\theta_1, \phi_1, \theta_2, \phi_2, \alpha) \in [\thetab_1\pm\epsilon,\phib_1\pm\epsilon,\thetab_2\pm\epsilon,\phib_2\pm\epsilon,\alphab\pm\epsilon] \subseteq \R^5.
$$
Lean code for Theorem7.15●1 theorem
Associated Lean declarations
-
theoremdefined in Noperthedron/RationalApprox/RationalLocal.leancomplete
theorem RationalApprox.LocalTheorem.rational_local
RationalApprox.LocalTheorem.rational_local {ι : Type} [Fintype ι] [DecidableEq ι] [Nonempty ι] (poly : GoodPoly ι) (poly_ : Polyhedron ι (Fin 3 → ℚ)) (hpoly : RationalApprox.κApproxPoly poly.vertices poly_) (Pi Qi : Fin 3 → ι) (cong_tri : Local.Triangle.Congruent (poly.vertices.v ∘ Pi) (poly.vertices.v ∘ Qi)) (p_ : Pose ℚ) (hp : p_ ∈ fourInterval ℚ) (ε δ r : ℚ) (hε : 0 < ε) (hr : 0 < r) (approx : RationalApprox.Approx) (hr₁ : RationalApprox.LocalTheorem.BoundRℚ r ε p_ (RationalApprox.κApproxPoly.transportTri Qi hpoly) approx) (hδ : RationalApprox.LocalTheorem.BoundDeltaℚ δ p_ (RationalApprox.κApproxPoly.transportTri Pi hpoly) (RationalApprox.κApproxPoly.transportTri Qi hpoly) approx) (ae₁ : Local.TriangleQ.Aεℚ p_.vecX₁ℚ (RationalApprox.κApproxPoly.transportTri Pi hpoly) ε approx) (ae₂ : Local.TriangleQ.Aεℚ p_.vecX₂ℚ (RationalApprox.κApproxPoly.transportTri Qi hpoly) ε approx) (span₁ : (RationalApprox.κApproxPoly.transportTri Pi hpoly).toReal.κSpanning ↑p_.θ₁ ↑p_.φ₁ ↑ε) (span₂ : (RationalApprox.κApproxPoly.transportTri Qi hpoly).toReal.κSpanning ↑p_.θ₂ ↑p_.φ₂ ↑ε) (be : (RationalApprox.κApproxPoly.transportTri Qi hpoly).Bεℚ Qi (fun k ↦ poly_.v (hpoly.bijection k)) p_ ε δ r approx) : ¬∃ p ∈ Metric.closedBall p_.toReal ↑ε, RupertPose p poly.hull[SY25] Theorem 48 "The Rational Local Theorem"{ιType: TypeA type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [FintypeFintype.{u_4} (α : Type u_4) : Type u_4`Fintype α` means that `α` is finite, i.e. there are only finitely many distinct elements of type `α`. The evidence of this is a finset `elems` (a list up to permutation without duplicates), together with a proof that everything of type `α` is in the list.ιType] [DecidableEqDecidableEq.{u} (α : Sort u) : Sort (max 1 u)Propositional equality is `Decidable` for all elements of a type. In other words, an instance of `DecidableEq α` is a means of deciding the proposition `a = b` is for all `a b : α`.ιType] [NonemptyNonempty.{u} (α : Sort u) : Prop`Nonempty α` is a typeclass that says that `α` is not an empty type, that is, there exists an element in the type. It differs from `Inhabited α` in that `Nonempty α` is a `Prop`, which means that it does not actually carry an element of `α`, only a proof that *there exists* such an element. Given `Nonempty α`, you can construct an element of `α` *nonconstructively* using `Classical.choice`.ιType] (polyGoodPoly ι: GoodPolyGoodPoly (ι : Type) [Fintype ι] [Nonempty ι] : TypeιType) (poly_Polyhedron ι (Fin 3 → ℚ): PolyhedronPolyhedron (ι X : Type) : TypeA convex polyhedron, given as a finite indexed set of vertices.ιType(FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.3 → ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.)) (hpolyRationalApprox.κApproxPoly poly.vertices poly_: RationalApprox.κApproxPolyRationalApprox.κApproxPoly {ι₁ ι₂ : Type} [Fintype ι₁] [Fintype ι₂] (A : Polyhedron ι₁ Euc(3)) (B : Polyhedron ι₂ (Fin 3 → ℚ)) : TypeA real polyhedron A and a rational polyhedron B that is a κ-approximation of A.polyGoodPoly ι.verticesGoodPoly.vertices {ι : Type} [Fintype ι] [Nonempty ι] (self : GoodPoly ι) : Polyhedron ι Euc(3)poly_Polyhedron ι (Fin 3 → ℚ)) (PiFin 3 → ιQiFin 3 → ι: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.3 → ιType) (cong_triLocal.Triangle.Congruent (poly.vertices.v ∘ Pi) (poly.vertices.v ∘ Qi): Local.Triangle.CongruentLocal.Triangle.Congruent (P Q : Local.Triangle) : Prop[SY25] Definition 34. We define "congruent" to mean "there exists a linear isometry". Note that this is stronger than "there exists an *affine* isometry", which might be the definition you usually think of.(Function.comp.{u, v, w} {α : Sort u} {β : Sort v} {δ : Sort w} (f : β → δ) (g : α → β) : α → δFunction composition, usually written with the infix operator `∘`. A new function is created from two existing functions, where one function's output is used as input to the other. Examples: * `Function.comp List.reverse (List.drop 2) [3, 2, 4, 1] = [1, 4]` * `(List.reverse ∘ List.drop 2) [3, 2, 4, 1] = [1, 4]` Conventions for notations in identifiers: * The recommended spelling of `∘` in identifiers is `comp`.polyGoodPoly ι.verticesGoodPoly.vertices {ι : Type} [Fintype ι] [Nonempty ι] (self : GoodPoly ι) : Polyhedron ι Euc(3).vPolyhedron.v {ι X : Type} (self : Polyhedron ι X) : ι → X∘Function.comp.{u, v, w} {α : Sort u} {β : Sort v} {δ : Sort w} (f : β → δ) (g : α → β) : α → δFunction composition, usually written with the infix operator `∘`. A new function is created from two existing functions, where one function's output is used as input to the other. Examples: * `Function.comp List.reverse (List.drop 2) [3, 2, 4, 1] = [1, 4]` * `(List.reverse ∘ List.drop 2) [3, 2, 4, 1] = [1, 4]` Conventions for notations in identifiers: * The recommended spelling of `∘` in identifiers is `comp`.PiFin 3 → ι)Function.comp.{u, v, w} {α : Sort u} {β : Sort v} {δ : Sort w} (f : β → δ) (g : α → β) : α → δFunction composition, usually written with the infix operator `∘`. A new function is created from two existing functions, where one function's output is used as input to the other. Examples: * `Function.comp List.reverse (List.drop 2) [3, 2, 4, 1] = [1, 4]` * `(List.reverse ∘ List.drop 2) [3, 2, 4, 1] = [1, 4]` Conventions for notations in identifiers: * The recommended spelling of `∘` in identifiers is `comp`.(Function.comp.{u, v, w} {α : Sort u} {β : Sort v} {δ : Sort w} (f : β → δ) (g : α → β) : α → δFunction composition, usually written with the infix operator `∘`. A new function is created from two existing functions, where one function's output is used as input to the other. Examples: * `Function.comp List.reverse (List.drop 2) [3, 2, 4, 1] = [1, 4]` * `(List.reverse ∘ List.drop 2) [3, 2, 4, 1] = [1, 4]` Conventions for notations in identifiers: * The recommended spelling of `∘` in identifiers is `comp`.polyGoodPoly ι.verticesGoodPoly.vertices {ι : Type} [Fintype ι] [Nonempty ι] (self : GoodPoly ι) : Polyhedron ι Euc(3).vPolyhedron.v {ι X : Type} (self : Polyhedron ι X) : ι → X∘Function.comp.{u, v, w} {α : Sort u} {β : Sort v} {δ : Sort w} (f : β → δ) (g : α → β) : α → δFunction composition, usually written with the infix operator `∘`. A new function is created from two existing functions, where one function's output is used as input to the other. Examples: * `Function.comp List.reverse (List.drop 2) [3, 2, 4, 1] = [1, 4]` * `(List.reverse ∘ List.drop 2) [3, 2, 4, 1] = [1, 4]` Conventions for notations in identifiers: * The recommended spelling of `∘` in identifiers is `comp`.QiFin 3 → ι)Function.comp.{u, v, w} {α : Sort u} {β : Sort v} {δ : Sort w} (f : β → δ) (g : α → β) : α → δFunction composition, usually written with the infix operator `∘`. A new function is created from two existing functions, where one function's output is used as input to the other. Examples: * `Function.comp List.reverse (List.drop 2) [3, 2, 4, 1] = [1, 4]` * `(List.reverse ∘ List.drop 2) [3, 2, 4, 1] = [1, 4]` Conventions for notations in identifiers: * The recommended spelling of `∘` in identifiers is `comp`.) (p_Pose ℚ: PosePose (R : Type) : TypeℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.) (hpp_ ∈ fourInterval ℚ: p_Pose ℚ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.fourIntervalfourInterval (R : Type) [Field R] [LinearOrder R] [IsStrictOrderedRing R] : PoseInterval RThe `[-4, 4]^5` box, used to constrain poses for rational approximation reasoning. Polymorphic over the value type so the same name works at both `ℚ` and `ℝ`.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.) (εℚδℚrℚ: ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.) (hε0 < ε: 0 <LT.lt.{u} {α : Type u} [self : LT α] : α → α → PropThe less-than relation: `x < y` Conventions for notations in identifiers: * The recommended spelling of `<` in identifiers is `lt`.εℚ) (hr0 < r: 0 <LT.lt.{u} {α : Type u} [self : LT α] : α → α → PropThe less-than relation: `x < y` Conventions for notations in identifiers: * The recommended spelling of `<` in identifiers is `lt`.rℚ) (approxRationalApprox.Approx: RationalApprox.ApproxRationalApprox.Approx : Type) (hr₁RationalApprox.LocalTheorem.BoundRℚ r ε p_ (RationalApprox.κApproxPoly.transportTri Qi hpoly) approx: RationalApprox.LocalTheorem.BoundRℚRationalApprox.LocalTheorem.BoundRℚ (r ε : ℚ) (p : Pose ℚ) (Q_ : Local.TriangleQ) (approx : RationalApprox.Approx) : PropThe condition on rrℚεℚp_Pose ℚ(RationalApprox.κApproxPoly.transportTriRationalApprox.κApproxPoly.transportTri {ι : Type} [Fintype ι] {A : Polyhedron ι Euc(3)} {B : Polyhedron ι (Fin 3 → ℚ)} (Pi : Fin 3 → ι) (hpoly : RationalApprox.κApproxPoly A B) : Local.TriangleQIf we have indices `Pi` for a triangle in `poly`, yield the corresponding triangle in `poly_` which κ-approximates it.QiFin 3 → ιhpolyRationalApprox.κApproxPoly poly.vertices poly_) approxRationalApprox.Approx) (hδRationalApprox.LocalTheorem.BoundDeltaℚ δ p_ (RationalApprox.κApproxPoly.transportTri Pi hpoly) (RationalApprox.κApproxPoly.transportTri Qi hpoly) approx: RationalApprox.LocalTheorem.BoundDeltaℚRationalApprox.LocalTheorem.BoundDeltaℚ (δ : ℚ) (p : Pose ℚ) (P_ Q_ : Local.TriangleQ) (approx : RationalApprox.Approx) : PropThe condition on δδℚp_Pose ℚ(RationalApprox.κApproxPoly.transportTriRationalApprox.κApproxPoly.transportTri {ι : Type} [Fintype ι] {A : Polyhedron ι Euc(3)} {B : Polyhedron ι (Fin 3 → ℚ)} (Pi : Fin 3 → ι) (hpoly : RationalApprox.κApproxPoly A B) : Local.TriangleQIf we have indices `Pi` for a triangle in `poly`, yield the corresponding triangle in `poly_` which κ-approximates it.PiFin 3 → ιhpolyRationalApprox.κApproxPoly poly.vertices poly_) (RationalApprox.κApproxPoly.transportTriRationalApprox.κApproxPoly.transportTri {ι : Type} [Fintype ι] {A : Polyhedron ι Euc(3)} {B : Polyhedron ι (Fin 3 → ℚ)} (Pi : Fin 3 → ι) (hpoly : RationalApprox.κApproxPoly A B) : Local.TriangleQIf we have indices `Pi` for a triangle in `poly`, yield the corresponding triangle in `poly_` which κ-approximates it.QiFin 3 → ιhpolyRationalApprox.κApproxPoly poly.vertices poly_) approxRationalApprox.Approx) (ae₁Local.TriangleQ.Aεℚ p_.vecX₁ℚ (RationalApprox.κApproxPoly.transportTri Pi hpoly) ε approx: Local.TriangleQ.AεℚLocal.TriangleQ.Aεℚ (X : Fin 3 → ℚ) (P_ : Local.TriangleQ) (ε : ℚ) (approx : RationalApprox.Approx) : PropCondition A_ε^ℚ from [SY25] Theorem 48p_Pose ℚ.vecX₁ℚPose.vecX₁ℚ (p : Pose ℚ) : Fin 3 → ℚ(RationalApprox.κApproxPoly.transportTriRationalApprox.κApproxPoly.transportTri {ι : Type} [Fintype ι] {A : Polyhedron ι Euc(3)} {B : Polyhedron ι (Fin 3 → ℚ)} (Pi : Fin 3 → ι) (hpoly : RationalApprox.κApproxPoly A B) : Local.TriangleQIf we have indices `Pi` for a triangle in `poly`, yield the corresponding triangle in `poly_` which κ-approximates it.PiFin 3 → ιhpolyRationalApprox.κApproxPoly poly.vertices poly_) εℚapproxRationalApprox.Approx) (ae₂Local.TriangleQ.Aεℚ p_.vecX₂ℚ (RationalApprox.κApproxPoly.transportTri Qi hpoly) ε approx: Local.TriangleQ.AεℚLocal.TriangleQ.Aεℚ (X : Fin 3 → ℚ) (P_ : Local.TriangleQ) (ε : ℚ) (approx : RationalApprox.Approx) : PropCondition A_ε^ℚ from [SY25] Theorem 48p_Pose ℚ.vecX₂ℚPose.vecX₂ℚ (p : Pose ℚ) : Fin 3 → ℚ(RationalApprox.κApproxPoly.transportTriRationalApprox.κApproxPoly.transportTri {ι : Type} [Fintype ι] {A : Polyhedron ι Euc(3)} {B : Polyhedron ι (Fin 3 → ℚ)} (Pi : Fin 3 → ι) (hpoly : RationalApprox.κApproxPoly A B) : Local.TriangleQIf we have indices `Pi` for a triangle in `poly`, yield the corresponding triangle in `poly_` which κ-approximates it.QiFin 3 → ιhpolyRationalApprox.κApproxPoly poly.vertices poly_) εℚapproxRationalApprox.Approx) (span₁(RationalApprox.κApproxPoly.transportTri Pi hpoly).toReal.κSpanning ↑p_.θ₁ ↑p_.φ₁ ↑ε: (RationalApprox.κApproxPoly.transportTriRationalApprox.κApproxPoly.transportTri {ι : Type} [Fintype ι] {A : Polyhedron ι Euc(3)} {B : Polyhedron ι (Fin 3 → ℚ)} (Pi : Fin 3 → ι) (hpoly : RationalApprox.κApproxPoly A B) : Local.TriangleQIf we have indices `Pi` for a triangle in `poly`, yield the corresponding triangle in `poly_` which κ-approximates it.PiFin 3 → ιhpolyRationalApprox.κApproxPoly poly.vertices poly_).toRealLocal.TriangleQ.toReal (t : Local.TriangleQ) : Local.Triangle.κSpanningLocal.Triangle.κSpanning (P : Local.Triangle) (θ φ ε : ℝ) : Prop[SY25] Definition 45. Note that the "+ 1" at the type Fin 3 wraps. We don't include in this definition the constraint that θ, φ ∈ [-4, 4] or that ‖P₁‖, ‖P₂‖, ‖P₃‖ ≤ 1 + κ. If a user of this code wants to impose those, they'll have to separately.↑p_Pose ℚ.θ₁Pose.θ₁ {R : Type} (self : Pose R) : R↑p_Pose ℚ.φ₁Pose.φ₁ {R : Type} (self : Pose R) : R↑εℚ) (span₂(RationalApprox.κApproxPoly.transportTri Qi hpoly).toReal.κSpanning ↑p_.θ₂ ↑p_.φ₂ ↑ε: (RationalApprox.κApproxPoly.transportTriRationalApprox.κApproxPoly.transportTri {ι : Type} [Fintype ι] {A : Polyhedron ι Euc(3)} {B : Polyhedron ι (Fin 3 → ℚ)} (Pi : Fin 3 → ι) (hpoly : RationalApprox.κApproxPoly A B) : Local.TriangleQIf we have indices `Pi` for a triangle in `poly`, yield the corresponding triangle in `poly_` which κ-approximates it.QiFin 3 → ιhpolyRationalApprox.κApproxPoly poly.vertices poly_).toRealLocal.TriangleQ.toReal (t : Local.TriangleQ) : Local.Triangle.κSpanningLocal.Triangle.κSpanning (P : Local.Triangle) (θ φ ε : ℝ) : Prop[SY25] Definition 45. Note that the "+ 1" at the type Fin 3 wraps. We don't include in this definition the constraint that θ, φ ∈ [-4, 4] or that ‖P₁‖, ‖P₂‖, ‖P₃‖ ≤ 1 + κ. If a user of this code wants to impose those, they'll have to separately.↑p_Pose ℚ.θ₂Pose.θ₂ {R : Type} (self : Pose R) : R↑p_Pose ℚ.φ₂Pose.φ₂ {R : Type} (self : Pose R) : R↑εℚ) (be(RationalApprox.κApproxPoly.transportTri Qi hpoly).Bεℚ Qi (fun k ↦ poly_.v (hpoly.bijection k)) p_ ε δ r approx: (RationalApprox.κApproxPoly.transportTriRationalApprox.κApproxPoly.transportTri {ι : Type} [Fintype ι] {A : Polyhedron ι Euc(3)} {B : Polyhedron ι (Fin 3 → ℚ)} (Pi : Fin 3 → ι) (hpoly : RationalApprox.κApproxPoly A B) : Local.TriangleQIf we have indices `Pi` for a triangle in `poly`, yield the corresponding triangle in `poly_` which κ-approximates it.QiFin 3 → ιhpolyRationalApprox.κApproxPoly poly.vertices poly_).BεℚLocal.TriangleQ.Bεℚ {ι : Type} [Fintype ι] [DecidableEq ι] (Q_ : Local.TriangleQ) (Qi : Fin 3 → ι) (v_ : ι → Fin 3 → ℚ) (p : Pose ℚ) (ε δ r : ℚ) (approx : RationalApprox.Approx) : PropCondition B_ε^ℚ from [SY25] Theorem 48QiFin 3 → ι(fun kι↦ poly_Polyhedron ι (Fin 3 → ℚ).vPolyhedron.v {ι X : Type} (self : Polyhedron ι X) : ι → X(hpolyRationalApprox.κApproxPoly poly.vertices poly_.bijectionRationalApprox.κApproxPoly.bijection {ι₁ ι₂ : Type} [Fintype ι₁] [Fintype ι₂] {A : Polyhedron ι₁ Euc(3)} {B : Polyhedron ι₂ (Fin 3 → ℚ)} (self : RationalApprox.κApproxPoly A B) : ι₁ ≃ ι₂kι)) p_Pose ℚεℚδℚrℚapproxRationalApprox.Approx) : ¬Not (a : Prop) : Prop`Not p`, or `¬p`, is the negation of `p`. It is defined to be `p → False`, so if your goal is `¬p` you can use `intro h` to turn the goal into `h : p ⊢ False`, and if you have `hn : ¬p` and `h : p` then `hn h : False` and `(hn h).elim` will prove anything. For more information: [Propositional Logic](https://lean-lang.org/theorem_proving_in_lean4/propositions_and_proofs.html#propositional-logic) Conventions for notations in identifiers: * The recommended spelling of `¬` in identifiers is `not`.∃ pPose ℝ∈ Metric.closedBallMetric.closedBall.{u} {α : Type u} [PseudoMetricSpace α] (x : α) (ε : ℝ) : Set α`closedBall x ε` is the set of all points `y` with `dist y x ≤ ε`p_Pose ℚ.toRealPose.toReal (p : Pose ℚ) : Pose ℝView a `Pose ℚ` as a `Pose ℝ` by `Rat.cast`-ing each component.↑εℚ, RupertPoseRupertPose {P : Type} [PoseLike P] (p : P) (s : Set Euc(3)) : PropA pose `p` demonstrates that a set `s` is rupert if the closure of the `p`-inner-shadow of `s` is a subset of the interior of the `p`-outer-shadow of `s`.pPose ℝpolyGoodPoly ι.hullGoodPoly.hull {ι : Type} [Fintype ι] [Nonempty ι] (poly : GoodPoly ι) : Set Euc(3)theorem RationalApprox.LocalTheorem.rational_local
RationalApprox.LocalTheorem.rational_local {ι : Type} [Fintype ι] [DecidableEq ι] [Nonempty ι] (poly : GoodPoly ι) (poly_ : Polyhedron ι (Fin 3 → ℚ)) (hpoly : RationalApprox.κApproxPoly poly.vertices poly_) (Pi Qi : Fin 3 → ι) (cong_tri : Local.Triangle.Congruent (poly.vertices.v ∘ Pi) (poly.vertices.v ∘ Qi)) (p_ : Pose ℚ) (hp : p_ ∈ fourInterval ℚ) (ε δ r : ℚ) (hε : 0 < ε) (hr : 0 < r) (approx : RationalApprox.Approx) (hr₁ : RationalApprox.LocalTheorem.BoundRℚ r ε p_ (RationalApprox.κApproxPoly.transportTri Qi hpoly) approx) (hδ : RationalApprox.LocalTheorem.BoundDeltaℚ δ p_ (RationalApprox.κApproxPoly.transportTri Pi hpoly) (RationalApprox.κApproxPoly.transportTri Qi hpoly) approx) (ae₁ : Local.TriangleQ.Aεℚ p_.vecX₁ℚ (RationalApprox.κApproxPoly.transportTri Pi hpoly) ε approx) (ae₂ : Local.TriangleQ.Aεℚ p_.vecX₂ℚ (RationalApprox.κApproxPoly.transportTri Qi hpoly) ε approx) (span₁ : (RationalApprox.κApproxPoly.transportTri Pi hpoly).toReal.κSpanning ↑p_.θ₁ ↑p_.φ₁ ↑ε) (span₂ : (RationalApprox.κApproxPoly.transportTri Qi hpoly).toReal.κSpanning ↑p_.θ₂ ↑p_.φ₂ ↑ε) (be : (RationalApprox.κApproxPoly.transportTri Qi hpoly).Bεℚ Qi (fun k ↦ poly_.v (hpoly.bijection k)) p_ ε δ r approx) : ¬∃ p ∈ Metric.closedBall p_.toReal ↑ε, RupertPose p poly.hull[SY25] Theorem 48 "The Rational Local Theorem"{ιType: TypeA type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [FintypeFintype.{u_4} (α : Type u_4) : Type u_4`Fintype α` means that `α` is finite, i.e. there are only finitely many distinct elements of type `α`. The evidence of this is a finset `elems` (a list up to permutation without duplicates), together with a proof that everything of type `α` is in the list.ιType] [DecidableEqDecidableEq.{u} (α : Sort u) : Sort (max 1 u)Propositional equality is `Decidable` for all elements of a type. In other words, an instance of `DecidableEq α` is a means of deciding the proposition `a = b` is for all `a b : α`.ιType] [NonemptyNonempty.{u} (α : Sort u) : Prop`Nonempty α` is a typeclass that says that `α` is not an empty type, that is, there exists an element in the type. It differs from `Inhabited α` in that `Nonempty α` is a `Prop`, which means that it does not actually carry an element of `α`, only a proof that *there exists* such an element. Given `Nonempty α`, you can construct an element of `α` *nonconstructively* using `Classical.choice`.ιType] (polyGoodPoly ι: GoodPolyGoodPoly (ι : Type) [Fintype ι] [Nonempty ι] : TypeιType) (poly_Polyhedron ι (Fin 3 → ℚ): PolyhedronPolyhedron (ι X : Type) : TypeA convex polyhedron, given as a finite indexed set of vertices.ιType(FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.3 → ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.)) (hpolyRationalApprox.κApproxPoly poly.vertices poly_: RationalApprox.κApproxPolyRationalApprox.κApproxPoly {ι₁ ι₂ : Type} [Fintype ι₁] [Fintype ι₂] (A : Polyhedron ι₁ Euc(3)) (B : Polyhedron ι₂ (Fin 3 → ℚ)) : TypeA real polyhedron A and a rational polyhedron B that is a κ-approximation of A.polyGoodPoly ι.verticesGoodPoly.vertices {ι : Type} [Fintype ι] [Nonempty ι] (self : GoodPoly ι) : Polyhedron ι Euc(3)poly_Polyhedron ι (Fin 3 → ℚ)) (PiFin 3 → ιQiFin 3 → ι: FinFin (n : ℕ) : TypeNatural numbers less than some upper bound. In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the canonical type with `n` elements.3 → ιType) (cong_triLocal.Triangle.Congruent (poly.vertices.v ∘ Pi) (poly.vertices.v ∘ Qi): Local.Triangle.CongruentLocal.Triangle.Congruent (P Q : Local.Triangle) : Prop[SY25] Definition 34. We define "congruent" to mean "there exists a linear isometry". Note that this is stronger than "there exists an *affine* isometry", which might be the definition you usually think of.(Function.comp.{u, v, w} {α : Sort u} {β : Sort v} {δ : Sort w} (f : β → δ) (g : α → β) : α → δFunction composition, usually written with the infix operator `∘`. A new function is created from two existing functions, where one function's output is used as input to the other. Examples: * `Function.comp List.reverse (List.drop 2) [3, 2, 4, 1] = [1, 4]` * `(List.reverse ∘ List.drop 2) [3, 2, 4, 1] = [1, 4]` Conventions for notations in identifiers: * The recommended spelling of `∘` in identifiers is `comp`.polyGoodPoly ι.verticesGoodPoly.vertices {ι : Type} [Fintype ι] [Nonempty ι] (self : GoodPoly ι) : Polyhedron ι Euc(3).vPolyhedron.v {ι X : Type} (self : Polyhedron ι X) : ι → X∘Function.comp.{u, v, w} {α : Sort u} {β : Sort v} {δ : Sort w} (f : β → δ) (g : α → β) : α → δFunction composition, usually written with the infix operator `∘`. A new function is created from two existing functions, where one function's output is used as input to the other. Examples: * `Function.comp List.reverse (List.drop 2) [3, 2, 4, 1] = [1, 4]` * `(List.reverse ∘ List.drop 2) [3, 2, 4, 1] = [1, 4]` Conventions for notations in identifiers: * The recommended spelling of `∘` in identifiers is `comp`.PiFin 3 → ι)Function.comp.{u, v, w} {α : Sort u} {β : Sort v} {δ : Sort w} (f : β → δ) (g : α → β) : α → δFunction composition, usually written with the infix operator `∘`. A new function is created from two existing functions, where one function's output is used as input to the other. Examples: * `Function.comp List.reverse (List.drop 2) [3, 2, 4, 1] = [1, 4]` * `(List.reverse ∘ List.drop 2) [3, 2, 4, 1] = [1, 4]` Conventions for notations in identifiers: * The recommended spelling of `∘` in identifiers is `comp`.(Function.comp.{u, v, w} {α : Sort u} {β : Sort v} {δ : Sort w} (f : β → δ) (g : α → β) : α → δFunction composition, usually written with the infix operator `∘`. A new function is created from two existing functions, where one function's output is used as input to the other. Examples: * `Function.comp List.reverse (List.drop 2) [3, 2, 4, 1] = [1, 4]` * `(List.reverse ∘ List.drop 2) [3, 2, 4, 1] = [1, 4]` Conventions for notations in identifiers: * The recommended spelling of `∘` in identifiers is `comp`.polyGoodPoly ι.verticesGoodPoly.vertices {ι : Type} [Fintype ι] [Nonempty ι] (self : GoodPoly ι) : Polyhedron ι Euc(3).vPolyhedron.v {ι X : Type} (self : Polyhedron ι X) : ι → X∘Function.comp.{u, v, w} {α : Sort u} {β : Sort v} {δ : Sort w} (f : β → δ) (g : α → β) : α → δFunction composition, usually written with the infix operator `∘`. A new function is created from two existing functions, where one function's output is used as input to the other. Examples: * `Function.comp List.reverse (List.drop 2) [3, 2, 4, 1] = [1, 4]` * `(List.reverse ∘ List.drop 2) [3, 2, 4, 1] = [1, 4]` Conventions for notations in identifiers: * The recommended spelling of `∘` in identifiers is `comp`.QiFin 3 → ι)Function.comp.{u, v, w} {α : Sort u} {β : Sort v} {δ : Sort w} (f : β → δ) (g : α → β) : α → δFunction composition, usually written with the infix operator `∘`. A new function is created from two existing functions, where one function's output is used as input to the other. Examples: * `Function.comp List.reverse (List.drop 2) [3, 2, 4, 1] = [1, 4]` * `(List.reverse ∘ List.drop 2) [3, 2, 4, 1] = [1, 4]` Conventions for notations in identifiers: * The recommended spelling of `∘` in identifiers is `comp`.) (p_Pose ℚ: PosePose (R : Type) : TypeℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.) (hpp_ ∈ fourInterval ℚ: p_Pose ℚ∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.fourIntervalfourInterval (R : Type) [Field R] [LinearOrder R] [IsStrictOrderedRing R] : PoseInterval RThe `[-4, 4]^5` box, used to constrain poses for rational approximation reasoning. Polymorphic over the value type so the same name works at both `ℚ` and `ℝ`.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.) (εℚδℚrℚ: ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.) (hε0 < ε: 0 <LT.lt.{u} {α : Type u} [self : LT α] : α → α → PropThe less-than relation: `x < y` Conventions for notations in identifiers: * The recommended spelling of `<` in identifiers is `lt`.εℚ) (hr0 < r: 0 <LT.lt.{u} {α : Type u} [self : LT α] : α → α → PropThe less-than relation: `x < y` Conventions for notations in identifiers: * The recommended spelling of `<` in identifiers is `lt`.rℚ) (approxRationalApprox.Approx: RationalApprox.ApproxRationalApprox.Approx : Type) (hr₁RationalApprox.LocalTheorem.BoundRℚ r ε p_ (RationalApprox.κApproxPoly.transportTri Qi hpoly) approx: RationalApprox.LocalTheorem.BoundRℚRationalApprox.LocalTheorem.BoundRℚ (r ε : ℚ) (p : Pose ℚ) (Q_ : Local.TriangleQ) (approx : RationalApprox.Approx) : PropThe condition on rrℚεℚp_Pose ℚ(RationalApprox.κApproxPoly.transportTriRationalApprox.κApproxPoly.transportTri {ι : Type} [Fintype ι] {A : Polyhedron ι Euc(3)} {B : Polyhedron ι (Fin 3 → ℚ)} (Pi : Fin 3 → ι) (hpoly : RationalApprox.κApproxPoly A B) : Local.TriangleQIf we have indices `Pi` for a triangle in `poly`, yield the corresponding triangle in `poly_` which κ-approximates it.QiFin 3 → ιhpolyRationalApprox.κApproxPoly poly.vertices poly_) approxRationalApprox.Approx) (hδRationalApprox.LocalTheorem.BoundDeltaℚ δ p_ (RationalApprox.κApproxPoly.transportTri Pi hpoly) (RationalApprox.κApproxPoly.transportTri Qi hpoly) approx: RationalApprox.LocalTheorem.BoundDeltaℚRationalApprox.LocalTheorem.BoundDeltaℚ (δ : ℚ) (p : Pose ℚ) (P_ Q_ : Local.TriangleQ) (approx : RationalApprox.Approx) : PropThe condition on δδℚp_Pose ℚ(RationalApprox.κApproxPoly.transportTriRationalApprox.κApproxPoly.transportTri {ι : Type} [Fintype ι] {A : Polyhedron ι Euc(3)} {B : Polyhedron ι (Fin 3 → ℚ)} (Pi : Fin 3 → ι) (hpoly : RationalApprox.κApproxPoly A B) : Local.TriangleQIf we have indices `Pi` for a triangle in `poly`, yield the corresponding triangle in `poly_` which κ-approximates it.PiFin 3 → ιhpolyRationalApprox.κApproxPoly poly.vertices poly_) (RationalApprox.κApproxPoly.transportTriRationalApprox.κApproxPoly.transportTri {ι : Type} [Fintype ι] {A : Polyhedron ι Euc(3)} {B : Polyhedron ι (Fin 3 → ℚ)} (Pi : Fin 3 → ι) (hpoly : RationalApprox.κApproxPoly A B) : Local.TriangleQIf we have indices `Pi` for a triangle in `poly`, yield the corresponding triangle in `poly_` which κ-approximates it.QiFin 3 → ιhpolyRationalApprox.κApproxPoly poly.vertices poly_) approxRationalApprox.Approx) (ae₁Local.TriangleQ.Aεℚ p_.vecX₁ℚ (RationalApprox.κApproxPoly.transportTri Pi hpoly) ε approx: Local.TriangleQ.AεℚLocal.TriangleQ.Aεℚ (X : Fin 3 → ℚ) (P_ : Local.TriangleQ) (ε : ℚ) (approx : RationalApprox.Approx) : PropCondition A_ε^ℚ from [SY25] Theorem 48p_Pose ℚ.vecX₁ℚPose.vecX₁ℚ (p : Pose ℚ) : Fin 3 → ℚ(RationalApprox.κApproxPoly.transportTriRationalApprox.κApproxPoly.transportTri {ι : Type} [Fintype ι] {A : Polyhedron ι Euc(3)} {B : Polyhedron ι (Fin 3 → ℚ)} (Pi : Fin 3 → ι) (hpoly : RationalApprox.κApproxPoly A B) : Local.TriangleQIf we have indices `Pi` for a triangle in `poly`, yield the corresponding triangle in `poly_` which κ-approximates it.PiFin 3 → ιhpolyRationalApprox.κApproxPoly poly.vertices poly_) εℚapproxRationalApprox.Approx) (ae₂Local.TriangleQ.Aεℚ p_.vecX₂ℚ (RationalApprox.κApproxPoly.transportTri Qi hpoly) ε approx: Local.TriangleQ.AεℚLocal.TriangleQ.Aεℚ (X : Fin 3 → ℚ) (P_ : Local.TriangleQ) (ε : ℚ) (approx : RationalApprox.Approx) : PropCondition A_ε^ℚ from [SY25] Theorem 48p_Pose ℚ.vecX₂ℚPose.vecX₂ℚ (p : Pose ℚ) : Fin 3 → ℚ(RationalApprox.κApproxPoly.transportTriRationalApprox.κApproxPoly.transportTri {ι : Type} [Fintype ι] {A : Polyhedron ι Euc(3)} {B : Polyhedron ι (Fin 3 → ℚ)} (Pi : Fin 3 → ι) (hpoly : RationalApprox.κApproxPoly A B) : Local.TriangleQIf we have indices `Pi` for a triangle in `poly`, yield the corresponding triangle in `poly_` which κ-approximates it.QiFin 3 → ιhpolyRationalApprox.κApproxPoly poly.vertices poly_) εℚapproxRationalApprox.Approx) (span₁(RationalApprox.κApproxPoly.transportTri Pi hpoly).toReal.κSpanning ↑p_.θ₁ ↑p_.φ₁ ↑ε: (RationalApprox.κApproxPoly.transportTriRationalApprox.κApproxPoly.transportTri {ι : Type} [Fintype ι] {A : Polyhedron ι Euc(3)} {B : Polyhedron ι (Fin 3 → ℚ)} (Pi : Fin 3 → ι) (hpoly : RationalApprox.κApproxPoly A B) : Local.TriangleQIf we have indices `Pi` for a triangle in `poly`, yield the corresponding triangle in `poly_` which κ-approximates it.PiFin 3 → ιhpolyRationalApprox.κApproxPoly poly.vertices poly_).toRealLocal.TriangleQ.toReal (t : Local.TriangleQ) : Local.Triangle.κSpanningLocal.Triangle.κSpanning (P : Local.Triangle) (θ φ ε : ℝ) : Prop[SY25] Definition 45. Note that the "+ 1" at the type Fin 3 wraps. We don't include in this definition the constraint that θ, φ ∈ [-4, 4] or that ‖P₁‖, ‖P₂‖, ‖P₃‖ ≤ 1 + κ. If a user of this code wants to impose those, they'll have to separately.↑p_Pose ℚ.θ₁Pose.θ₁ {R : Type} (self : Pose R) : R↑p_Pose ℚ.φ₁Pose.φ₁ {R : Type} (self : Pose R) : R↑εℚ) (span₂(RationalApprox.κApproxPoly.transportTri Qi hpoly).toReal.κSpanning ↑p_.θ₂ ↑p_.φ₂ ↑ε: (RationalApprox.κApproxPoly.transportTriRationalApprox.κApproxPoly.transportTri {ι : Type} [Fintype ι] {A : Polyhedron ι Euc(3)} {B : Polyhedron ι (Fin 3 → ℚ)} (Pi : Fin 3 → ι) (hpoly : RationalApprox.κApproxPoly A B) : Local.TriangleQIf we have indices `Pi` for a triangle in `poly`, yield the corresponding triangle in `poly_` which κ-approximates it.QiFin 3 → ιhpolyRationalApprox.κApproxPoly poly.vertices poly_).toRealLocal.TriangleQ.toReal (t : Local.TriangleQ) : Local.Triangle.κSpanningLocal.Triangle.κSpanning (P : Local.Triangle) (θ φ ε : ℝ) : Prop[SY25] Definition 45. Note that the "+ 1" at the type Fin 3 wraps. We don't include in this definition the constraint that θ, φ ∈ [-4, 4] or that ‖P₁‖, ‖P₂‖, ‖P₃‖ ≤ 1 + κ. If a user of this code wants to impose those, they'll have to separately.↑p_Pose ℚ.θ₂Pose.θ₂ {R : Type} (self : Pose R) : R↑p_Pose ℚ.φ₂Pose.φ₂ {R : Type} (self : Pose R) : R↑εℚ) (be(RationalApprox.κApproxPoly.transportTri Qi hpoly).Bεℚ Qi (fun k ↦ poly_.v (hpoly.bijection k)) p_ ε δ r approx: (RationalApprox.κApproxPoly.transportTriRationalApprox.κApproxPoly.transportTri {ι : Type} [Fintype ι] {A : Polyhedron ι Euc(3)} {B : Polyhedron ι (Fin 3 → ℚ)} (Pi : Fin 3 → ι) (hpoly : RationalApprox.κApproxPoly A B) : Local.TriangleQIf we have indices `Pi` for a triangle in `poly`, yield the corresponding triangle in `poly_` which κ-approximates it.QiFin 3 → ιhpolyRationalApprox.κApproxPoly poly.vertices poly_).BεℚLocal.TriangleQ.Bεℚ {ι : Type} [Fintype ι] [DecidableEq ι] (Q_ : Local.TriangleQ) (Qi : Fin 3 → ι) (v_ : ι → Fin 3 → ℚ) (p : Pose ℚ) (ε δ r : ℚ) (approx : RationalApprox.Approx) : PropCondition B_ε^ℚ from [SY25] Theorem 48QiFin 3 → ι(fun kι↦ poly_Polyhedron ι (Fin 3 → ℚ).vPolyhedron.v {ι X : Type} (self : Polyhedron ι X) : ι → X(hpolyRationalApprox.κApproxPoly poly.vertices poly_.bijectionRationalApprox.κApproxPoly.bijection {ι₁ ι₂ : Type} [Fintype ι₁] [Fintype ι₂] {A : Polyhedron ι₁ Euc(3)} {B : Polyhedron ι₂ (Fin 3 → ℚ)} (self : RationalApprox.κApproxPoly A B) : ι₁ ≃ ι₂kι)) p_Pose ℚεℚδℚrℚapproxRationalApprox.Approx) : ¬Not (a : Prop) : Prop`Not p`, or `¬p`, is the negation of `p`. It is defined to be `p → False`, so if your goal is `¬p` you can use `intro h` to turn the goal into `h : p ⊢ False`, and if you have `hn : ¬p` and `h : p` then `hn h : False` and `(hn h).elim` will prove anything. For more information: [Propositional Logic](https://lean-lang.org/theorem_proving_in_lean4/propositions_and_proofs.html#propositional-logic) Conventions for notations in identifiers: * The recommended spelling of `¬` in identifiers is `not`.∃ pPose ℝ∈ Metric.closedBallMetric.closedBall.{u} {α : Type u} [PseudoMetricSpace α] (x : α) (ε : ℝ) : Set α`closedBall x ε` is the set of all points `y` with `dist y x ≤ ε`p_Pose ℚ.toRealPose.toReal (p : Pose ℚ) : Pose ℝView a `Pose ℚ` as a `Pose ℝ` by `Rat.cast`-ing each component.↑εℚ, RupertPoseRupertPose {P : Type} [PoseLike P] (p : P) (s : Set Euc(3)) : PropA pose `p` demonstrates that a set `s` is rupert if the closure of the `p`-inner-shadow of `s` is a subset of the interior of the `p`-outer-shadow of `s`.pPose ℝpolyGoodPoly ι.hullGoodPoly.hull {ι : Type} [Fintype ι] [Nonempty ι] (poly : GoodPoly ι) : Set Euc(3)[SY25] Theorem 48 "The Rational Local Theorem"