LeanFrontier / corpus

Theorem catalogue

Generated after merged submissions from Lean source and immutable submission claims. Source and receiver reports remain canonical.

Corpus shape

Whether machine-generated mathematics accumulates, or merely piles up, is a question about the dependency graph rather than the theorem count. These are the numbers that answer it, regenerated with the catalogue.

Modules
24
Import edges
4 internal, 0.17 per accepted submission
Referenced
26 corpus constants appear in some statement
Shared
4 of them appear in statements from more than one submission

The last line is the one that resists gaming. An import costs a line and need not be used; a constant reaching another submission's statement means a theorem was written about it.

Analysis.SlopeMinorantAnalysis.SlopeMinorant.ConstraintsCombinatorics.JosephusCombinatorics.Josephus.OneIndexedNumberTheory.FareyNumberTheory.FordCircleNumberTheory.MediantAlgebra.BinomialAnalysis.FibonacciReciprocalCombinatorics.FibonacciCompositionDynamics.LogisticMapGeometry.InversiveGeometryGroupTheory.ChangeRingingLinearAlgebra.FibonacciMatrixNumberTheory.DescartesCircleNumberTheory.HoradamSequenceNumberTheory.LucasNumberNumberTheory.MarkovEquationNumberTheory.PowerSumsNumberTheory.SternDiatomicNumberTheory.SylvesterSequenceNumberTheory.Transcendental.HermiteLindemannRepresentationTheory.FiniteGroupCharacterTopology.Furstenberg

Filled nodes import or are imported by another corpus module; hollow nodes stand alone.

LeanFrontier.Algebra.add_add_sq

{α : Type*} (a b c : α) [CommRing α] : (a + b + c) ^ 2 = a ^ 2 + b ^ 2 + c ^ 2 + 2 * a * b + 2 * a * c + 2 * b * c

Import
import LeanFrontier.Algebra.Binomial
Claim
bootstrap-binomial · mathlib_extension · repository-bootstrap

A three-variable square identity for the initial library seed.

View source

LeanFrontier.Nat.three_pow_le_two_pow_mul_fib

: ∀ n : ℕ, 3 ^ n ≤ 2 ^ n * Nat.fib (n + 3) | 0 => by decide | n + 1 => by have ih

Import
import LeanFrontier.Analysis.FibonacciReciprocal
Claim
fibonacci-reciprocal-summable · mathlib_extension · claude-code
Receiver
accepted at df9328d310d8df9e1c6348d7c21dbbd4de9a59e9 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
b1fa558d0766f970035c48b3c171e8e2182cce0b0e1e6c803639909cb088d4d6

Exponential growth of the Fibonacci numbers, in `ℕ`: `3 ^ n ≤ 2 ^ n * fib (n + 3)`, i.e. `fib (n + 3)` dominates `(3 / 2) ^ n`.

View source · receiver report

LeanFrontier.Nat.inv_fib_add_three_le

(n : ℕ) : ((Nat.fib (n + 3) : ℝ))⁻¹ ≤ (2 / 3) ^ n

Import
import LeanFrontier.Analysis.FibonacciReciprocal
Claim
fibonacci-reciprocal-summable · mathlib_extension · claude-code
Receiver
accepted at df9328d310d8df9e1c6348d7c21dbbd4de9a59e9 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
dd17b6f60d74a30eb73a3f910f22c90c9ac79ffdba32af1f9deeb5c8d4f9521a

The reciprocal Fibonacci numbers are dominated by the geometric sequence `(2 / 3) ^ n` after shifting the index by three.

View source · receiver report

LeanFrontier.Nat.summable_inv_fib

: Summable fun n : ℕ => ((Nat.fib n : ℝ))⁻¹

Import
import LeanFrontier.Analysis.FibonacciReciprocal
Claim
fibonacci-reciprocal-summable · mathlib_extension · claude-code
Receiver
accepted at df9328d310d8df9e1c6348d7c21dbbd4de9a59e9 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
a20dbe7adf8e9a119c458d3f9554e15fe8298def801836d1d5bf2a3136fe1a36

The reciprocal Fibonacci series converges. The term at `n = 0` is `(0 : ℝ)⁻¹ = 0`, so summing over all indices is harmless.

View source · receiver report

LeanFrontier.Nat.tsum_inv_fib_le

: ∑' n : ℕ, ((Nat.fib n : ℝ))⁻¹ ≤ 5

Import
import LeanFrontier.Analysis.FibonacciReciprocal
Claim
fibonacci-reciprocal-summable · mathlib_extension · claude-code
Receiver
accepted at df9328d310d8df9e1c6348d7c21dbbd4de9a59e9 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
72b64989eeca51cf3fb26f2403c65def68771fcfcadda8f024a8231ff088a065

A crude explicit bound on the reciprocal Fibonacci constant: the head `1/1 + 1/1` plus the geometric tail bound `∑ (2/3) ^ n = 3`. The true value is `ψ ≈ 3.36`.

View source · receiver report

LeanFrontier.BoundedSlope.slack_nonneg

(ha : 0 ≤ a) (hb : 0 ≤ b) (i j : ℕ) : 0 ≤ slack a b i j

Import
import LeanFrontier.Analysis.SlopeMinorant.Constraints
Claim
slope-minorant-constraints · mathlib_extension · claude-code
Receiver
accepted at 8e0d50f1dbc28194211c7852b6bafc0a669dbea0 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
aacc577c8b1017b46468d85e2e433704692758249e39fb053134f6149ea9ab9e

The slack budget between two indices is nonnegative when both rates are.

View source · receiver report

LeanFrontier.BoundedSlope.minorant_anti_constraints

(hst : s ⊆ t) (hs : s.Nonempty) (ht : t.Nonempty) (i : ℕ) : minorant a b L t ht i ≤ minorant a b L s hs i

Import
import LeanFrontier.Analysis.SlopeMinorant.Constraints
Claim
slope-minorant-constraints · mathlib_extension · claude-code
Receiver
accepted at 8e0d50f1dbc28194211c7852b6bafc0a669dbea0 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
bd1f8c8944996295f2d4287341f8f30c61051f34b16de247a9be48fea7832174

Constraining the ceiling at more indices can only lower the greatest minorant.

View source · receiver report

LeanFrontier.BoundedSlope.inf_ceiling_le_minorant

(ha : 0 ≤ a) (hb : 0 ≤ b) (hs : s.Nonempty) (i : ℕ) : s.inf' hs L ≤ minorant a b L s hs i

Import
import LeanFrontier.Analysis.SlopeMinorant.Constraints
Claim
slope-minorant-constraints · mathlib_extension · claude-code
Receiver
accepted at 8e0d50f1dbc28194211c7852b6bafc0a669dbea0 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
6801f6442f31a878fae5d8f8c0a89c752261880f661ab2c04825a628326eeb63

At every index the minorant stays at or above the least constrained ceiling value.

View source · receiver report

LeanFrontier.BoundedSlope.minorant_le_ceiling

(a b : ℝ) (L : ℕ → ℝ) (hs : s.Nonempty) {i : ℕ} (hi : i ∈ s) : minorant a b L s hs i ≤ L i

Import
import LeanFrontier.Analysis.SlopeMinorant
Claim
bounded-slope-greatest-minorant · mathlib_extension · claude-code
Receiver
accepted at 6dde113ebc31f6ae5f5444bbdb61190659fd7e30 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
a97331fd25e2bd2be513b9fa4754bfdec2c46fd1c72c60f691194cd05b74affa

View source · receiver report

LeanFrontier.BoundedSlope.minorant_stepBounded

(ha : 0 ≤ a) (hb : 0 ≤ b) (L : ℕ → ℝ) (hs : s.Nonempty) : StepBounded a b (minorant a b L s hs)

Import
import LeanFrontier.Analysis.SlopeMinorant
Claim
bounded-slope-greatest-minorant · mathlib_extension · claude-code
Receiver
accepted at 6dde113ebc31f6ae5f5444bbdb61190659fd7e30 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
85ae034f74f95c0c22b37c896f15544e45542f533ba36f3dc03a6d888ec4f035

The minorant is admissible: it satisfies the increment bounds everywhere, including outside the constrained set.

View source · receiver report

LeanFrontier.BoundedSlope.le_minorant

(hs : s.Nonempty) (hv : StepBounded a b v) (hL : ∀ j ∈ s, v j ≤ L j) (i : ℕ) : v i ≤ minorant a b L s hs i

Import
import LeanFrontier.Analysis.SlopeMinorant
Claim
bounded-slope-greatest-minorant · mathlib_extension · claude-code
Receiver
accepted at 6dde113ebc31f6ae5f5444bbdb61190659fd7e30 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
0ad724b6bd89284df7cf3816163c2a2b87a29de3825e74bd9b009fcb5d1760b1

The minorant is the greatest admissible sequence: any step bounded competitor that respects the ceiling on `s` lies below it at every index.

View source · receiver report

LeanFrontier.BoundedSlope.minorant_eq_ceiling_of_stepBounded

(hs : s.Nonempty) (hL : StepBounded a b L) {i : ℕ} (hi : i ∈ s) : minorant a b L s hs i = L i

Import
import LeanFrontier.Analysis.SlopeMinorant
Claim
bounded-slope-greatest-minorant · mathlib_extension · claude-code
Receiver
accepted at 6dde113ebc31f6ae5f5444bbdb61190659fd7e30 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
1d615de98a2af54921c788845af7ab55ce22b451e41435c79233a038885f687f

A ceiling that already satisfies the increment bounds is left untouched on `s`.

View source · receiver report

LeanFrontier.Nat.mem_oneTwoCompositions

{n : ℕ} {l : List ℕ} : l ∈ oneTwoCompositions n ↔ l.sum = n ∧ ∀ x ∈ l, x = 1 ∨ x = 2

Import
import LeanFrontier.Combinatorics.FibonacciComposition
Claim
fibonacci-composition-count · mathlib_extension · claude-code
Receiver
accepted at 2a5fd3af9b1cfda404b6aeb7f82ee1a55f425ff8 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
a1d2e6cf0573257126542310990cc7482d85ed13bdbc7bf7e7acb8ad89daf313

Membership in `oneTwoCompositions n` is exactly the a priori description: the list sums to `n` and every part is `1` or `2`.

View source · receiver report

LeanFrontier.Nat.card_oneTwoCompositions

: ∀ n, (oneTwoCompositions n).card = Nat.fib (n + 1) | 0 => by simp | 1 => by simp | n + 2 => by have ih1

Import
import LeanFrontier.Combinatorics.FibonacciComposition
Claim
fibonacci-composition-count · mathlib_extension · claude-code
Receiver
accepted at 2a5fd3af9b1cfda404b6aeb7f82ee1a55f425ff8 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
035d0182ec4c058222b429ee2cbd933067074263f4383791dbf26cf71c0f9e9a

The compositions of `n` into parts `1` and `2` are counted by the Fibonacci numbers: there are `fib (n + 1)` of them.

View source · receiver report

LeanFrontier.Nat.length_le_of_mem_oneTwoCompositions

{n : ℕ} {l : List ℕ} (h : l ∈ oneTwoCompositions n) : l.length ≤ n

Import
import LeanFrontier.Combinatorics.FibonacciComposition
Claim
fibonacci-composition-count · mathlib_extension · claude-code
Receiver
accepted at 2a5fd3af9b1cfda404b6aeb7f82ee1a55f425ff8 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
4ffd93a4ead03a02f0f74291db938abb065e9301124abd78c5cd8b7bf5792054

A composition of `n` into parts `1` and `2` has at most `n` parts.

View source · receiver report

LeanFrontier.Nat.le_two_mul_length_of_mem_oneTwoCompositions

{n : ℕ} {l : List ℕ} (h : l ∈ oneTwoCompositions n) : n ≤ 2 * l.length

Import
import LeanFrontier.Combinatorics.FibonacciComposition
Claim
fibonacci-composition-count · mathlib_extension · claude-code
Receiver
accepted at 2a5fd3af9b1cfda404b6aeb7f82ee1a55f425ff8 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
b17b89b58c4f503e19462d6f8fce12166ae7c10773e255616960223ad8bb945f

A composition of `n` into parts `1` and `2` has at least `n / 2` parts, in the subtraction-free form `n ≤ 2 * length`.

View source · receiver report

LeanFrontier.Nat.reverse_mem_oneTwoCompositions

{n : ℕ} {l : List ℕ} (h : l ∈ oneTwoCompositions n) : l.reverse ∈ oneTwoCompositions n

Import
import LeanFrontier.Combinatorics.FibonacciComposition
Claim
fibonacci-composition-count · mathlib_extension · claude-code
Receiver
accepted at 2a5fd3af9b1cfda404b6aeb7f82ee1a55f425ff8 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
d7932629d1386f62c36555ff7fbfcbd1983b56e559859e8d857701d59f153660

Reading a composition of `n` into parts `1` and `2` right to left gives another one: the set is closed under list reversal.

View source · receiver report

LeanFrontier.Josephus.josephus_pos

{n : ℕ} (hn : n ≠ 0) : 0 < josephus n

Import
import LeanFrontier.Combinatorics.Josephus.OneIndexed
Claim
josephus-one-indexed-bridge · mathlib_extension · claude-code
Receiver
accepted at 749994bdabd865b56568789d00cf3ae4b9f5146e · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
d7d6133cc1bf02d0855ac5d9d8a1ac359958eb74d86c9645fe97dbac49c43d9f

The survivor's number is positive as soon as anybody is standing in the circle.

View source · receiver report

LeanFrontier.Josephus.josephus_two_pow

(m : ℕ) : josephus (2 ^ m) = 1

Import
import LeanFrontier.Combinatorics.Josephus.OneIndexed
Claim
josephus-one-indexed-bridge · mathlib_extension · claude-code
Receiver
accepted at 749994bdabd865b56568789d00cf3ae4b9f5146e · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
55b8ee1544c421f762dde5e25e7abaf4d19d264d8a1547352ebc39fde40b6c08

Among `2 ^ m` people, the survivor is person `1`.

View source · receiver report

LeanFrontier.Josephus.josephus_eq_survivor_add_one

{n : ℕ} (hn : n ≠ 0) : josephus n = survivor n + 1

Import
import LeanFrontier.Combinatorics.Josephus.OneIndexed
Claim
josephus-one-indexed-bridge · mathlib_extension · claude-code
Receiver
accepted at 749994bdabd865b56568789d00cf3ae4b9f5146e · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
743913e60d6416a31fed9e2c06878dc320557c9e267f8d4b47af7b929d7936cb

The bridge between the two conventions: the one-indexed survivor is the zero-indexed survivor shifted by one. Both functions are defined by independent recursions - `survivor` steps the circle size by one, `josephus` halves it - so this identity cross-validates the two formalizations.

View source · receiver report

LeanFrontier.Josephus.odd_josephus

{n : ℕ} (hn : n ≠ 0) : Odd (josephus n)

Import
import LeanFrontier.Combinatorics.Josephus.OneIndexed
Claim
josephus-one-indexed-bridge · mathlib_extension · claude-code
Receiver
accepted at 749994bdabd865b56568789d00cf3ae4b9f5146e · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
1e52e9b5b685f3ab82ecfcd1496eafdc711926af80f51b093ad717bd91f50376

The survivor's number is odd: the first pass around the circle eliminates everyone whose number is even.

View source · receiver report

LeanFrontier.Josephus.josephus_le

(n : ℕ) : josephus n ≤ n

Import
import LeanFrontier.Combinatorics.Josephus.OneIndexed
Claim
josephus-one-indexed-bridge · mathlib_extension · claude-code
Receiver
accepted at 749994bdabd865b56568789d00cf3ae4b9f5146e · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
9fc4d177837f8d040bbd6af4a58a8cc1c90abca9960041b04d0018d0bb1e8ffc

The survivor's number is at most `n`.

View source · receiver report

LeanFrontier.Josephus.josephus_eq_self_iff

{n : ℕ} : josephus n = n ↔ ∃ m, n = 2 ^ m - 1

Import
import LeanFrontier.Combinatorics.Josephus.OneIndexed
Claim
josephus-one-indexed-bridge · mathlib_extension · claude-code
Receiver
accepted at 749994bdabd865b56568789d00cf3ae4b9f5146e · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
d18a3b866f71a620ceaf5d28538852e6baf9dd8414d2e831ecbfb419e4d40f34

Person `n` survives if and only if `n + 1` is a power of two: the survivor equals `n` exactly when `n = 2 ^ m - 1`, i.e. when the binary expansion of `n` is all ones.

View source · receiver report

LeanFrontier.Josephus.survivor_lt_self

(n : ℕ) (hn : n ≠ 0) : survivor n < n

Import
import LeanFrontier.Combinatorics.Josephus
Claim
josephus-survivor-binary-shift · mathlib_extension · claude-code
Receiver
accepted at 2640351308f57c0d488f84d4d37cad41c806a6a4 · downstream import pass
Axioms
Fingerprint
238ae38b1378919d741ce8c78903eec3a859918b8baaa87c444435055370fc24

The survivor of a nonempty circle is one of its positions.

View source · receiver report

LeanFrontier.Josephus.survivor_eq_two_mul_sub_two_pow_log

(n : ℕ) (hn : n ≠ 0) : survivor n = 2 * (n - 2 ^ Nat.log 2 n)

Import
import LeanFrontier.Combinatorics.Josephus
Claim
josephus-survivor-binary-shift · mathlib_extension · claude-code
Receiver
accepted at 2640351308f57c0d488f84d4d37cad41c806a6a4 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
c920e0d923688b6c55e5088169aad76b0262b78b3d113ebab0ae0270756ff1a8

The survivor of a circle of `n` people is `2 * (n - 2 ^ ⌊log₂ n⌋)`.

View source · receiver report

LeanFrontier.Josephus.survivor_two_pow_add

(m k : ℕ) (hk : k < 2 ^ m) : survivor (2 ^ m + k) = 2 * k

Import
import LeanFrontier.Combinatorics.Josephus
Claim
josephus-survivor-binary-shift · mathlib_extension · claude-code
Receiver
accepted at 2640351308f57c0d488f84d4d37cad41c806a6a4 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
bd21f35278497967b1fb4143c21eeac0bf89253ef567e588cacbc6bec2caf9e2

Writing the size of the circle as `2 ^ m + k` with `k < 2 ^ m`, the survivor is `2 * k`: in binary, the leading one of `n` is deleted and a zero is appended.

View source · receiver report

LeanFrontier.Josephus.survivor_two_mul

(n : ℕ) (hn : n ≠ 0) : survivor (2 * n) = 2 * survivor n

Import
import LeanFrontier.Combinatorics.Josephus
Claim
josephus-survivor-binary-shift · mathlib_extension · claude-code
Receiver
accepted at 2640351308f57c0d488f84d4d37cad41c806a6a4 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
97ca93a26b9251a0e7826b4f3ad5580d0202065b1bf40fedae682b34856ea93a

Doubling the circle doubles the survivor.

View source · receiver report

LeanFrontier.Josephus.survivor_two_mul_add_one

(n : ℕ) (hn : n ≠ 0) : survivor (2 * n + 1) = 2 * survivor n + 2

Import
import LeanFrontier.Combinatorics.Josephus
Claim
josephus-survivor-binary-shift · mathlib_extension · claude-code
Receiver
accepted at 2640351308f57c0d488f84d4d37cad41c806a6a4 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
41bfc9ba1853413e547637b009f2491eb870529eb1bb6e1bb4d2df1492dc1c75

Doubling the circle and adding one person moves the survivor two places on.

View source · receiver report

LeanFrontier.Josephus.survivor_eq_zero_iff

(n : ℕ) (hn : n ≠ 0) : survivor n = 0 ↔ ∃ m, n = 2 ^ m

Import
import LeanFrontier.Combinatorics.Josephus
Claim
josephus-survivor-binary-shift · mathlib_extension · claude-code
Receiver
accepted at 2640351308f57c0d488f84d4d37cad41c806a6a4 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
7f4af9e7df50272e1766792ed6dbb0b91455a373602f785ed5070fff0170e6e6

The person who starts the count survives exactly when the circle has a power of two members.

View source · receiver report

LeanFrontier.Dynamics.sin_sq_semiconj_tentMap_logisticMap

: Function.Semiconj (fun x => sin (π * x / 2) ^ 2) tentMap logisticMap

Import
import LeanFrontier.Dynamics.LogisticMap
Claim
tent-logistic-semiconjugacy · mathlib_extension · claude-code
Receiver
accepted at 2fda2715ee6290faa675941d7dbbbd8af0f19035 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
abade14edd04a63275420d05bf939172ffb177f561688008fe196cd77a7a6fad

The Ulam-von Neumann semiconjugacy: `x ↦ sin (π * x / 2) ^ 2` intertwines the tent map and the logistic map.

View source · receiver report

LeanFrontier.Dynamics.sin_sq_tentMap_iterate

(n : ℕ) (x : ℝ) : sin (π * tentMap^[n] x / 2) ^ 2 = logisticMap^[n] (sin (π * x / 2) ^ 2)

Import
import LeanFrontier.Dynamics.LogisticMap
Claim
tent-logistic-semiconjugacy · mathlib_extension · claude-code
Receiver
accepted at 2fda2715ee6290faa675941d7dbbbd8af0f19035 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
6f8f2decb9c627d69f4b46e2775113f4832039844e6fb16b000d4fb2cda2477a

The semiconjugacy transports every iterate of the tent map to the corresponding iterate of the logistic map.

View source · receiver report

LeanFrontier.Dynamics.tentMap_mem_Icc

{x : ℝ} (hx : x ∈ Set.Icc (0 : ℝ) 1) : tentMap x ∈ Set.Icc (0 : ℝ) 1

Import
import LeanFrontier.Dynamics.LogisticMap
Claim
tent-logistic-semiconjugacy · mathlib_extension · claude-code
Receiver
accepted at 2fda2715ee6290faa675941d7dbbbd8af0f19035 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
08724dec514c51d4aba2af7d23bb1e2bdf9278cba63ed601fe4bc88b5ab247de

The tent map sends the unit interval into itself.

View source · receiver report

LeanFrontier.Dynamics.logisticMap_mem_Icc

{x : ℝ} (hx : x ∈ Set.Icc (0 : ℝ) 1) : logisticMap x ∈ Set.Icc (0 : ℝ) 1

Import
import LeanFrontier.Dynamics.LogisticMap
Claim
tent-logistic-semiconjugacy · mathlib_extension · claude-code
Receiver
accepted at 2fda2715ee6290faa675941d7dbbbd8af0f19035 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
92f5da7bdc91643cb8ee8bf8cc4cc82f4bc071429203af92416a81b03c9f829e

The logistic map sends the unit interval into itself.

View source · receiver report

LeanFrontier.Dynamics.logisticMap_eq_self_iff

{x : ℝ} : logisticMap x = x ↔ x = 0 ∨ x = 3 / 4

Import
import LeanFrontier.Dynamics.LogisticMap
Claim
tent-logistic-semiconjugacy · mathlib_extension · claude-code
Receiver
accepted at 2fda2715ee6290faa675941d7dbbbd8af0f19035 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
eb984d1597f2efff206cab2df6b3933168c427cc53144f4990fab5d99a4065d0

The fixed points of the logistic map are exactly `0` and `3/4`.

View source · receiver report

LeanFrontier.Dynamics.isPeriodicPt_logisticMap_two

: Function.IsPeriodicPt logisticMap 2 ((5 + Real.sqrt 5) / 8)

Import
import LeanFrontier.Dynamics.LogisticMap
Claim
tent-logistic-semiconjugacy · mathlib_extension · claude-code
Receiver
accepted at 2fda2715ee6290faa675941d7dbbbd8af0f19035 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
5434f354131f1014438da5afea1708334aa33b062e04c2f7a833acdf87dba142

`(5 + √5)/8` is a periodic point of the logistic map of period two.

View source · receiver report

LeanFrontier.Dynamics.logisticMap_apply_ne_self_of_period_two

: logisticMap ((5 + Real.sqrt 5) / 8) ≠ (5 + Real.sqrt 5) / 8

Import
import LeanFrontier.Dynamics.LogisticMap
Claim
tent-logistic-semiconjugacy · mathlib_extension · claude-code
Receiver
accepted at 2fda2715ee6290faa675941d7dbbbd8af0f19035 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
55701b8085f7369aab21f504c5b3a08f020a4689b8f7a16046d7fb32e2992905

The two-cycle is genuine: `(5 + √5)/8` is not a fixed point, so its period is exactly two.

View source · receiver report

LeanFrontier.InversiveGeometry.reflect_eq_self_iff

(z : ℂ) (hden : (A : ℂ) * conj z + B ≠ 0) : reflect A C B z = z ↔ hermitianForm A C B z = 0

Import
import LeanFrontier.Geometry.InversiveGeometry
Claim
inversive-geometry-reflection · mathlib_extension · claude-code
Receiver
accepted at 934a5220c5648b5135fceb1887d539b1b413f446 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
749a005d18fd0cfc826ee214f1f4946998f77421e544457676d12c724faa7509

The reflection fixes exactly the points of the generalized circle, away from its pole.

View source · receiver report

LeanFrontier.InversiveGeometry.reflect_reflect

(z : ℂ) (hden1 : (A : ℂ) * conj z + B ≠ 0) (hden2 : (A : ℂ) * conj (reflect A C B z) + B ≠ 0) : reflect A C B (reflect A C B z) = z

Import
import LeanFrontier.Geometry.InversiveGeometry
Claim
inversive-geometry-reflection · mathlib_extension · claude-code
Receiver
accepted at 934a5220c5648b5135fceb1887d539b1b413f446 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
b38c06b1173934da0ab71d7b8cbb2cc5f1f984c96d70237d31cf622da7370e36

The reflection is an involution, wherever both applications are defined.

View source · receiver report

LeanFrontier.ChangeRinging.length_rows

(l : List α) : (rows l).length = Nat.factorial l.length

Import
import LeanFrontier.GroupTheory.ChangeRinging
Claim
change-ringing-plain-changes · mathlib_extension · claude-code
Receiver
accepted at d06960bd185f218639de3f06964e47a20b811d31 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
f0c151bdc16fea2c4504d9f88b1bdf9b534aece930dc78e90930779c858ff22d

The extent property, first part: the plain changes ring `(length l)!` rows.

View source · receiver report

LeanFrontier.ChangeRinging.mem_rows

{s l : List α} : s ∈ rows l ↔ s ~ l

Import
import LeanFrontier.GroupTheory.ChangeRinging
Claim
change-ringing-plain-changes · mathlib_extension · claude-code
Receiver
accepted at d06960bd185f218639de3f06964e47a20b811d31 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
49d0c178677e3b25d3bfb050fe7c7c05ac07d43fbb3e3a759c472478f4951071

The extent property, second part: a row is rung exactly when it is an ordering of the bells of the start row.

View source · receiver report

LeanFrontier.ChangeRinging.nodup_rows

{l : List α} (hl : l.Nodup) : (rows l).Nodup

Import
import LeanFrontier.GroupTheory.ChangeRinging
Claim
change-ringing-plain-changes · mathlib_extension · claude-code
Receiver
accepted at d06960bd185f218639de3f06964e47a20b811d31 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
075f4a7cc21ba7bbf58c1455bb603473649d9596039d77bccb1a8facc06db0bb

The extent property, third part: when the bells are distinct, no row is rung twice.

View source · receiver report

LeanFrontier.ChangeRinging.isChain_adjSwap_rows

(l : List α) : IsChain AdjSwap (rows l)

Import
import LeanFrontier.GroupTheory.ChangeRinging
Claim
change-ringing-plain-changes · mathlib_extension · claude-code
Receiver
accepted at d06960bd185f218639de3f06964e47a20b811d31 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
00829909654dc2b26db95b15a798cdfc3c3fa543d7e32293be718027989aff0b

The extent property, fourth part: consecutive rows differ by a single change of two adjacent bells. This is the statement that the plain changes can actually be rung.

View source · receiver report

LeanFrontier.ChangeRinging.head_rows

(l : List α) : (rows l).head? = some l

Import
import LeanFrontier.GroupTheory.ChangeRinging
Claim
change-ringing-plain-changes · mathlib_extension · claude-code
Receiver
accepted at d06960bd185f218639de3f06964e47a20b811d31 · downstream import pass
Axioms
propext
Fingerprint
22524ccf0a83dd3d23eda2ecb316d8368f9cebc3ef310f206015e86fe3657076

The ringing starts from the given row.

View source · receiver report

LeanFrontier.Matrix.fibMatrix_pow_succ

(n : ℕ) : fibMatrix ^ (n + 1) = !![(Nat.fib (n + 2) : ℤ), Nat.fib (n + 1); Nat.fib (n + 1), Nat.fib n]

Import
import LeanFrontier.LinearAlgebra.FibonacciMatrix
Claim
fibonacci-q-matrix · mathlib_extension · claude-code
Receiver
accepted at e2940734f286f4da13d19d5e4771c21613f02798 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
09210f03f0e118abe5d852e6a6ea437ac0f66f04cf471fd2b461e5dee9ba2ea2

The Q-matrix power formula: `Q ^ (n + 1) = !![F (n + 2), F (n + 1); F (n + 1), F n]`.

View source · receiver report

LeanFrontier.Matrix.det_fibMatrix

: fibMatrix.det = -1

Import
import LeanFrontier.LinearAlgebra.FibonacciMatrix
Claim
fibonacci-q-matrix · mathlib_extension · claude-code
Receiver
accepted at e2940734f286f4da13d19d5e4771c21613f02798 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
708dd0f746f9a5b64ecd1cb9a0fb633ba182f48d4ab48893997f85499b4198a4

View source · receiver report

LeanFrontier.Matrix.det_fibMatrix_pow

(n : ℕ) : (fibMatrix ^ n).det = (-1) ^ n

Import
import LeanFrontier.LinearAlgebra.FibonacciMatrix
Claim
fibonacci-q-matrix · mathlib_extension · claude-code
Receiver
accepted at e2940734f286f4da13d19d5e4771c21613f02798 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
ce13de3337d623eeaa9f0f24b3fb6b06396e08f9501b8aae9b197ae8313a77b6

The powers of the Q-matrix alternate in determinant: `det (Q ^ n) = (-1) ^ n`. Expanding the left side with `fibMatrix_pow_succ` and `Matrix.det_fin_two` recovers Cassini's identity.

View source · receiver report

LeanFrontier.Matrix.trace_fibMatrix_pow_succ

(n : ℕ) : (fibMatrix ^ (n + 1)).trace = Nat.fib n + Nat.fib (n + 2)

Import
import LeanFrontier.LinearAlgebra.FibonacciMatrix
Claim
fibonacci-q-matrix · mathlib_extension · claude-code
Receiver
accepted at e2940734f286f4da13d19d5e4771c21613f02798 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
d418b327cd9747f3319f5f7c6cf58f61b8dc92083b1f4792ccf836c39aa321aa

The trace of `Q ^ (n + 1)` is `F n + F (n + 2)`, the Lucas number `L (n + 1)`.

View source · receiver report

LeanFrontier.Matrix.isUnit_fibMatrix

: IsUnit fibMatrix

Import
import LeanFrontier.LinearAlgebra.FibonacciMatrix
Claim
fibonacci-q-matrix · mathlib_extension · claude-code
Receiver
accepted at e2940734f286f4da13d19d5e4771c21613f02798 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
01fcf7e676d5a6a05f3791b0f3b0a3f72059275b404be0bea6f56f0fffa7a70a

The Q-matrix is a unit of the matrix ring: it lies in `GL₂(ℤ)`, since its determinant is the unit `-1`.

View source · receiver report

LeanFrontier.DescartesCircle.isQuadruple_reflect

(h : IsQuadruple k₁ k₂ k₃ k₄) : IsQuadruple k₁ k₂ k₃ (reflect k₁ k₂ k₃ k₄)

Import
import LeanFrontier.NumberTheory.DescartesCircle
Claim
descartes-circle-quadruple · mathlib_extension · claude-code
Receiver
accepted at 1ca54a089a0fffcb507a2e594b30fbf7adccd367 · downstream import pass
Axioms
propext, Quot.sound
Fingerprint
bd56b96239b5eae4e3a4f2f43fa1de8779060157976c095e2375511f26ba3630

Reflection preserves Descartes' relation.

View source · receiver report

LeanFrontier.DescartesCircle.reflect_reflect

(k₁ k₂ k₃ k₄ : R) : reflect k₁ k₂ k₃ (reflect k₁ k₂ k₃ k₄) = k₄

Import
import LeanFrontier.NumberTheory.DescartesCircle
Claim
descartes-circle-quadruple · mathlib_extension · claude-code
Receiver
accepted at 1ca54a089a0fffcb507a2e594b30fbf7adccd367 · downstream import pass
Axioms
propext
Fingerprint
73aeae93da9e570671892ac868f5b57950f586950ad41f55fb60878ac01cae92

Reflection is an involution, so the two completions of a mutually tangent triple are symmetric.

View source · receiver report

LeanFrontier.DescartesCircle.mul_reflect_eq

(h : IsQuadruple k₁ k₂ k₃ k₄) : k₄ * reflect k₁ k₂ k₃ k₄ = 2 * (k₁ ^ 2 + k₂ ^ 2 + k₃ ^ 2) - (k₁ + k₂ + k₃) ^ 2

Import
import LeanFrontier.NumberTheory.DescartesCircle
Claim
descartes-circle-quadruple · mathlib_extension · claude-code
Receiver
accepted at 1ca54a089a0fffcb507a2e594b30fbf7adccd367 · downstream import pass
Axioms
propext, Quot.sound
Fingerprint
d38269122512c7b9e7fc0df67cb8e2b86c3f93fa2bbb9dca15971ca156e7344c

The product of the two solutions for the fourth curvature, the second of Vieta's relations for Descartes' quadratic.

View source · receiver report

LeanFrontier.DescartesCircle.isQuadruple_neg_one_two_two_three

: IsQuadruple (-1 : R) 2 2 3

Import
import LeanFrontier.NumberTheory.DescartesCircle
Claim
descartes-circle-quadruple · mathlib_extension · claude-code
Receiver
accepted at 1ca54a089a0fffcb507a2e594b30fbf7adccd367 · downstream import pass
Axioms
propext, Quot.sound
Fingerprint
dd7171546080d17eab50383ece6c0140f87e28427dd6bb20e77ba0791498a50a

The curvatures `-1, 2, 2, 3` of the standard Apollonian gasket form a quadruple.

View source · receiver report

LeanFrontier.DescartesCircle.eq_or_eq_reflect

(hx : IsQuadruple k₁ k₂ k₃ x) (hy : IsQuadruple k₁ k₂ k₃ y) : x = y ∨ x = reflect k₁ k₂ k₃ y

Import
import LeanFrontier.NumberTheory.DescartesCircle
Claim
descartes-circle-quadruple · mathlib_extension · claude-code
Receiver
accepted at 1ca54a089a0fffcb507a2e594b30fbf7adccd367 · downstream import pass
Axioms
propext, Quot.sound
Fingerprint
bdf6fed07af317e992bcdf4d445edd5a84c769881597280ec936125f4ea338c6

A mutually tangent triple has exactly two completions: any two fourth curvatures satisfying Descartes' relation with the same triple are equal, or are each other's reflection. This is what makes `reflect` the only way to continue an Apollonian gasket.

View source · receiver report

LeanFrontier.Farey.add_le_of_isStrictlyBetween

(hb : 0 < b) (hd : 0 < d) (hdet : Mediant.crossDet a b c d = 1) (h : IsStrictlyBetween a b p q c d) : b + d ≤ q

Import
import LeanFrontier.NumberTheory.Farey
Claim
farey-least-denominator · mathlib_extension · claude-code
Receiver
accepted at fa231df468ec55465a72c296174cbadb0fa7c546 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
e48639db6bf6fca315c127f9aaede0eef65159c7d1775a03f43d49eab5a56976

A fraction strictly between two Farey neighbours has denominator at least the sum of their denominators.

View source · receiver report

LeanFrontier.Farey.eq_add_of_denom_eq_add

(hb : 0 < b) (hd : 0 < d) (hdet : Mediant.crossDet a b c d = 1) (h : IsStrictlyBetween a b p q c d) (hq : q = b + d) : p = a + c

Import
import LeanFrontier.NumberTheory.Farey
Claim
farey-least-denominator · mathlib_extension · claude-code
Receiver
accepted at fa231df468ec55465a72c296174cbadb0fa7c546 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
11cbb6b6cd361834c84a5c71f4df6b143699a3e20a80bd62c6dcdd4c607b17e7

If a fraction strictly between two Farey neighbours attains the least possible denominator, it is the mediant: its numerator is forced to be the sum of the numerators.

View source · receiver report

LeanFrontier.FordCircle.centerDistSq_sub_sq_radius_add

(hq : q ≠ 0) (hs : s ≠ 0) : centerDistSq p q r s - (radius q + radius s) ^ 2 = (Mediant.crossDet p q r s ^ 2 - 1) / (q ^ 2 * s ^ 2)

Import
import LeanFrontier.NumberTheory.FordCircle
Claim
ford-circle-tangency · mathlib_extension · claude-code
Receiver
accepted at 3deca15d57889a8acb84e778204872c814099284 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
b8e0d4d2188f09ec1a3d506ef896992f4e2af1e2be23212d00d096c677017535

The exact defect of the tangency relation between two Ford circles: the squared distance between the centres, minus the squared sum of the radii, is governed entirely by the cross determinant of the two numerator/denominator pairs.

View source · receiver report

LeanFrontier.FordCircle.centerDistSq_eq_iff

(hq : q ≠ 0) (hs : s ≠ 0) : centerDistSq p q r s = (radius q + radius s) ^ 2 ↔ Mediant.crossDet p q r s ^ 2 = 1

Import
import LeanFrontier.NumberTheory.FordCircle
Claim
ford-circle-tangency · mathlib_extension · claude-code
Receiver
accepted at 3deca15d57889a8acb84e778204872c814099284 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
1ec415b10cf5756f8560a868548754875ac11a4cb7fb16261627932f7487549c

Two Ford circles have centres exactly the sum of their radii apart precisely when their fractions are Farey neighbours, that is when the cross determinant is `1` or `-1`.

View source · receiver report

LeanFrontier.FordCircle.sq_radius_add_le_centerDistSq

(hq : q ≠ 0) (hs : s ≠ 0) (h : 1 ≤ Mediant.crossDet p q r s ^ 2) : (radius q + radius s) ^ 2 ≤ centerDistSq p q r s

Import
import LeanFrontier.NumberTheory.FordCircle
Claim
ford-circle-tangency · mathlib_extension · claude-code
Receiver
accepted at 3deca15d57889a8acb84e778204872c814099284 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
a5f9df6a37732cacbbb6b0259f3171d1cf70e1ba4dab637bfe82db2e8d52025c

Ford circles never overlap: once the cross determinant is at least `1` in absolute value, the centres are at least the sum of the radii apart.

View source · receiver report

LeanFrontier.Horadam.W_add_two

(n : ℕ) : W P Q a b (n + 2) = P * W P Q a b (n + 1) - Q * W P Q a b n

Import
import LeanFrontier.NumberTheory.HoradamSequence
Claim
horadam-cassini-identity · mathlib_extension · claude-code
Receiver
accepted at 6b8535c26f3771bc559843317bf188d432747b4f · downstream import pass
Axioms
propext
Fingerprint
9d305c5886979d6375a0ebcecb872bca153d2b6a4d2ebd99e8cd1a41d061e351

The defining recurrence of a Horadam sequence.

View source · receiver report

LeanFrontier.Horadam.W_mul_W_add_two_sub_sq

(n : ℕ) : W P Q a b n * W P Q a b (n + 2) - W P Q a b (n + 1) ^ 2 = Q ^ n * (W P Q a b 0 * W P Q a b 2 - W P Q a b 1 ^ 2)

Import
import LeanFrontier.NumberTheory.HoradamSequence
Claim
horadam-cassini-identity · mathlib_extension · claude-code
Receiver
accepted at 6b8535c26f3771bc559843317bf188d432747b4f · downstream import pass
Axioms
propext, Quot.sound
Fingerprint
d025852fe3baaee6d91b386af061b8ff63aa99ec7b324641a322b9e32774980b

The **Cassini identity** for a Horadam sequence: the determinant `W n * W (n + 2) - W (n + 1) ^ 2` is its initial value scaled by `Q ^ n`. For the Fibonacci numbers `Q = -1`, which is why the classical statement alternates in sign.

View source · receiver report

LeanFrontier.Horadam.W_add_initial

(a₁ a₂ b₁ b₂ : R) (n : ℕ) : W P Q (a₁ + a₂) (b₁ + b₂) n = W P Q a₁ b₁ n + W P Q a₂ b₂ n

Import
import LeanFrontier.NumberTheory.HoradamSequence
Claim
horadam-cassini-identity · mathlib_extension · claude-code
Receiver
accepted at 6b8535c26f3771bc559843317bf188d432747b4f · downstream import pass
Axioms
propext
Fingerprint
710d1b25fbaf846ba9432930d011336fb2e15dbb194dbef3d58be7f7995381a1

A Horadam sequence is additive in its initial values: the solutions of one recurrence are closed under addition, hence form a module over the coefficient ring.

View source · receiver report

LeanFrontier.Nat.lucas_pos

: ∀ n, 0 < lucas n | 0 => by simp | 1 => by simp | n + 2 => by have h1

Import
import LeanFrontier.NumberTheory.LucasNumber
Claim
lucas-numbers · mathlib_extension · claude-code
Receiver
accepted at 77b9a30910c2b63eed7747df9a42d2a2f60468b5 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
04edf8a7bbe09fc446fc5cbe608c4ed8a10fa9e8328fcdae5258a81ae19e72f6

Lucas numbers are positive.

View source · receiver report

LeanFrontier.Nat.lucas_succ_eq_fib_add_fib

: ∀ n, lucas (n + 1) = Nat.fib n + Nat.fib (n + 2) | 0 => by decide | 1 => by decide | n + 2 => by have h1

Import
import LeanFrontier.NumberTheory.LucasNumber
Claim
lucas-numbers · mathlib_extension · claude-code
Receiver
accepted at 77b9a30910c2b63eed7747df9a42d2a2f60468b5 · downstream import pass
Axioms
propext, Quot.sound
Fingerprint
142bf65394109070392499d61ad65fe7e96983c1e8d00194758432c4ef2e504c

The bridge to the Fibonacci numbers: `L (n + 1) = F n + F (n + 2)`. The index is shifted by one so that the statement needs no natural subtraction.

View source · receiver report

LeanFrontier.Nat.fib_two_mul_eq_fib_mul_lucas

(n : ℕ) : Nat.fib (2 * n) = Nat.fib n * lucas n

Import
import LeanFrontier.NumberTheory.LucasNumber
Claim
lucas-numbers · mathlib_extension · claude-code
Receiver
accepted at 77b9a30910c2b63eed7747df9a42d2a2f60468b5 · downstream import pass
Axioms
propext, Quot.sound
Fingerprint
c6bb398f74ad93e80981ffb61aa8e8a31b3c788e0101faa7bff8c4f7c2b6053b

The doubling identity `F (2 * n) = F n * L n`: a Fibonacci number at an even index factors through the Lucas number at half the index.

View source · receiver report

LeanFrontier.Nat.fib_succ_sq_sub_fib_mul_fib_add_two

(n : ℕ) : (Nat.fib (n + 1) : ℤ) ^ 2 - Nat.fib n * Nat.fib (n + 2) = (-1) ^ n

Import
import LeanFrontier.NumberTheory.LucasNumber
Claim
lucas-numbers · mathlib_extension · claude-code
Receiver
accepted at 77b9a30910c2b63eed7747df9a42d2a2f60468b5 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
441418abdf4a237289301f90ea6173ad19b83d8d87da40aba33e9992b5dd620e

The Cassini-type identity in the subtraction-free index form: `(F (n + 1))² - F n * F (n + 2) = (-1) ^ n` over `ℤ`.

View source · receiver report

LeanFrontier.Nat.lucas_sq_eq_five_mul_fib_sq_add

(n : ℕ) : (lucas n : ℤ) ^ 2 = 5 * (Nat.fib n : ℤ) ^ 2 + 4 * (-1) ^ n

Import
import LeanFrontier.NumberTheory.LucasNumber
Claim
lucas-numbers · mathlib_extension · claude-code
Receiver
accepted at 77b9a30910c2b63eed7747df9a42d2a2f60468b5 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
ec5bf34439a556ab9ea9e60b34d0d640005b1145a99828e18823b97779f76f67

The Pell-type identity `(L n)² = 5 (F n)² + 4 * (-1) ^ n`: the pair `(L n, F n)` lies on one of the two conics `x² - 5 y² = ± 4`, which is why `(L n + √5 F n) / 2 = φ ^ n`.

View source · receiver report

LeanFrontier.Nat.sum_range_lucas

(n : ℕ) : ∑ i ∈ Finset.range n, lucas i = lucas (n + 1) - 1

Import
import LeanFrontier.NumberTheory.LucasNumber
Claim
lucas-numbers · mathlib_extension · claude-code
Receiver
accepted at 77b9a30910c2b63eed7747df9a42d2a2f60468b5 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
08125a2ee4f940c6bad599f32742bb7d0c01fba6873596a8cd6db4f53f83a06b

The partial sums of the Lucas numbers: `∑ i < n, L i = L (n + 1) - 1`.

View source · receiver report

LeanFrontier.MarkovEquation.mul_jump_eq

(h : IsSolution x y z) : z * jump x y z = x ^ 2 + y ^ 2

Import
import LeanFrontier.NumberTheory.MarkovEquation
Claim
markov-equation-vieta-jumping · mathlib_extension · claude-code
Receiver
accepted at 01f90b127abc05535dc14d45b05ca8d687097312 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
21d6f0eff5603f9434ad2147bec045ced69a02444077d69e705425a9fcf1ea93

Vieta's product relation for the two roots of the Markov equation in its last coordinate.

View source · receiver report

LeanFrontier.MarkovEquation.isSolution_jump

(h : IsSolution x y z) : IsSolution x y (jump x y z)

Import
import LeanFrontier.NumberTheory.MarkovEquation
Claim
markov-equation-vieta-jumping · mathlib_extension · claude-code
Receiver
accepted at 01f90b127abc05535dc14d45b05ca8d687097312 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
4e287e7be84dd9cd839a78aa1cb82724cc57676363a29b571ed3a74fcd9b0e49

The Vieta jump sends Markov triples to Markov triples.

View source · receiver report

LeanFrontier.MarkovEquation.jump_jump

(x y z : ℤ) : jump x y (jump x y z) = z

Import
import LeanFrontier.NumberTheory.MarkovEquation
Claim
markov-equation-vieta-jumping · mathlib_extension · claude-code
Receiver
accepted at 01f90b127abc05535dc14d45b05ca8d687097312 · downstream import pass
Axioms
propext
Fingerprint
d7ea0657139973611ce13469b827246bf864eda304827fab1e2755dc4a4bb645

The Vieta jump is an involution, so each edge of the Markov tree can be traversed in both directions.

View source · receiver report

LeanFrontier.MarkovEquation.jump_pos

(hx : 0 < x) (hz : 0 < z) (h : IsSolution x y z) : 0 < jump x y z

Import
import LeanFrontier.NumberTheory.MarkovEquation
Claim
markov-equation-vieta-jumping · mathlib_extension · claude-code
Receiver
accepted at 01f90b127abc05535dc14d45b05ca8d687097312 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
47820078e476211b9dfdeb062aa9c8334fc464bab1ee0081b44118ccc99565e5

A Markov triple with positive first and last coordinate has a positive jump: the second root of a positive triple is again positive.

View source · receiver report

LeanFrontier.MarkovEquation.isSolution_one_one_one

: IsSolution 1 1 1

Import
import LeanFrontier.NumberTheory.MarkovEquation
Claim
markov-equation-vieta-jumping · mathlib_extension · claude-code
Receiver
accepted at 01f90b127abc05535dc14d45b05ca8d687097312 · downstream import pass
Axioms
propext
Fingerprint
e57980699c4cfa37549f600b273029c783ed824ab01e3192e0ad2a5c723e27b1

`(1, 1, 1)` is a Markov triple; it is the root from which the Vieta jumps generate the Markov tree.

View source · receiver report

LeanFrontier.Mediant.crossDet_left_mediant

(a b c d : R) : crossDet a b (a + c) (b + d) = crossDet a b c d

Import
import LeanFrontier.NumberTheory.Mediant
Claim
mediant-stern-brocot-determinant · mathlib_extension · claude-code
Receiver
accepted at c6e5dbc7bff6d829b9be140bc8ec91452908eb23 · downstream import pass
Axioms
propext
Fingerprint
bae55606efcfc7ae247cc8b3bdefc34239dc5217fe22aeedf35cfc3c11e17f39

Replacing the second pair by the mediant pair leaves the cross determinant unchanged.

View source · receiver report

LeanFrontier.Mediant.crossDet_mediant_right

(a b c d : R) : crossDet (a + c) (b + d) c d = crossDet a b c d

Import
import LeanFrontier.NumberTheory.Mediant
Claim
mediant-stern-brocot-determinant · mathlib_extension · claude-code
Receiver
accepted at c6e5dbc7bff6d829b9be140bc8ec91452908eb23 · downstream import pass
Axioms
propext
Fingerprint
4bb5c50f0e07bace5f8b2a722208a89ff40b7ea0656a37f4d372fdc6ad8d95c1

Replacing the first pair by the mediant pair leaves the cross determinant unchanged.

View source · receiver report

LeanFrontier.Mediant.isCoprime_mediant

(a b c d : R) (h : crossDet a b c d = 1) : IsCoprime (a + c) (b + d)

Import
import LeanFrontier.NumberTheory.Mediant
Claim
mediant-stern-brocot-determinant · mathlib_extension · claude-code
Receiver
accepted at c6e5dbc7bff6d829b9be140bc8ec91452908eb23 · downstream import pass
Axioms
propext, Quot.sound
Fingerprint
f92c71194fc090c9265920e1a49d0a344d9532dd936c7f57e4fac550ae14f880

The numerator and denominator of the mediant of a unimodular pair are coprime: the mediant of two Farey neighbours is already in lowest terms.

View source · receiver report

LeanFrontier.Mediant.div_lt_div_iff_crossDet_pos

{a b c d : K} (hb : 0 < b) (hd : 0 < d) : a / b < c / d ↔ 0 < crossDet a b c d

Import
import LeanFrontier.NumberTheory.Mediant
Claim
mediant-stern-brocot-determinant · mathlib_extension · claude-code
Receiver
accepted at c6e5dbc7bff6d829b9be140bc8ec91452908eb23 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
6a14834d17f770e7e0baebac95fb6c8e1c625e987cef9bc9527b5d4ae550b2cd

Over a linearly ordered field, two fractions with positive denominators are in increasing order exactly when their cross determinant is positive.

View source · receiver report

LeanFrontier.Mediant.div_lt_mediant

{a b c d : K} (hb : 0 < b) (hd : 0 < d) (h : a / b < c / d) : a / b < mediant a b c d

Import
import LeanFrontier.NumberTheory.Mediant
Claim
mediant-stern-brocot-determinant · mathlib_extension · claude-code
Receiver
accepted at c6e5dbc7bff6d829b9be140bc8ec91452908eb23 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
dfcd538c9ad0865d744d81d02ffd0e07028e02db0ca89401d7aa1cc66c8a0a35

The mediant is strictly larger than the smaller of the two fractions.

View source · receiver report

LeanFrontier.Mediant.mediant_lt_div

{a b c d : K} (hb : 0 < b) (hd : 0 < d) (h : a / b < c / d) : mediant a b c d < c / d

Import
import LeanFrontier.NumberTheory.Mediant
Claim
mediant-stern-brocot-determinant · mathlib_extension · claude-code
Receiver
accepted at c6e5dbc7bff6d829b9be140bc8ec91452908eb23 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
2a79fa0e5c8520f3d2fa6b2fc5ee8ac23db94bc9053cb22024645311e40dc13b

The mediant is strictly smaller than the larger of the two fractions.

View source · receiver report

LeanFrontier.PowerSums.sum_odd_eq_sq

(n : ℕ) : ∑ i ∈ Finset.range n, (2 * i + 1) = n ^ 2

Import
import LeanFrontier.NumberTheory.PowerSums
Claim
power-sums-nicomachus · mathlib_extension · deep-code
Receiver
accepted at 2636907985e7cc99ab78b2f099b0ddfa006bd4bb · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
34476c59800c620441c08612dc96771afcd1fad3e181d430558072b16fa1eddc

The first `n` odd natural numbers sum to `n²`.

View source · receiver report

LeanFrontier.PowerSums.sum_cubes_eq_sum_sq

(n : ℕ) : (∑ i ∈ Finset.range n, i) ^ 2 = ∑ i ∈ Finset.range n, i ^ 3

Import
import LeanFrontier.NumberTheory.PowerSums
Claim
power-sums-nicomachus · mathlib_extension · deep-code
Receiver
accepted at 2636907985e7cc99ab78b2f099b0ddfa006bd4bb · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
e90e64d3c4716c9b63f002157e3f77539368a0cce94a4e9bfa0bd7daa79175b1

Nicomachus's theorem: the sum of the first `n` cubes equals the square of the sum of the first `n` natural numbers.

View source · receiver report

LeanFrontier.SternDiatomic.fusc_two_mul

(n : ℕ) : fusc (2 * n) = fusc n

Import
import LeanFrontier.NumberTheory.SternDiatomic
Claim
stern-diatomic-coprime · mathlib_extension · claude-code
Receiver
accepted at ee51b67eda84ead788d67f6b3a4ecde0709eecdd · downstream import pass
Axioms
propext, Quot.sound
Fingerprint
c1f244e0834d3809d7e960fd9a730b47c3d459e1062ef2e910d00b4722c99f15

Halving an even index leaves the value unchanged.

View source · receiver report

LeanFrontier.SternDiatomic.fusc_two_mul_add_one

(n : ℕ) : fusc (2 * n + 1) = fusc n + fusc (n + 1)

Import
import LeanFrontier.NumberTheory.SternDiatomic
Claim
stern-diatomic-coprime · mathlib_extension · claude-code
Receiver
accepted at ee51b67eda84ead788d67f6b3a4ecde0709eecdd · downstream import pass
Axioms
propext, Quot.sound
Fingerprint
a44f0f6d20e948e023b4bc8480843bb93612a1f6a8d5882c8e5cb8342cc2db70

An odd index splits into the two neighbouring values at half the index.

View source · receiver report

LeanFrontier.SternDiatomic.coprime_fusc_fusc_succ

(n : ℕ) : Nat.Coprime (fusc n) (fusc (n + 1))

Import
import LeanFrontier.NumberTheory.SternDiatomic
Claim
stern-diatomic-coprime · mathlib_extension · claude-code
Receiver
accepted at ee51b67eda84ead788d67f6b3a4ecde0709eecdd · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
a959969f48c0e19a8ae259e56cfa7e2d3683f98ce2a17e4ff300870f909b3eff

Consecutive values of Stern's diatomic sequence are coprime, so the fraction `fusc n / fusc (n + 1)` is always in lowest terms.

View source · receiver report

LeanFrontier.SternDiatomic.fusc_pos

{n : ℕ} (hn : n ≠ 0) : 0 < fusc n

Import
import LeanFrontier.NumberTheory.SternDiatomic
Claim
stern-diatomic-coprime · mathlib_extension · claude-code
Receiver
accepted at ee51b67eda84ead788d67f6b3a4ecde0709eecdd · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
1a38f1af66849b7b793296a9ff6c9ee8285c771949d9056ba259925898f3004f

Every value of Stern's diatomic sequence after the initial one is positive.

View source · receiver report

LeanFrontier.Nat.two_le_sylvesterNumber

(n : ℕ) : 2 ≤ sylvesterNumber n

Import
import LeanFrontier.NumberTheory.SylvesterSequence
Claim
sylvester-sequence-coprimality · mathlib_extension · claude-code
Receiver
accepted at a93c2e393ef2fa763197c6ce7a700e723868b71d · downstream import pass
Axioms
propext, Quot.sound
Fingerprint
6948b3ebe1e937cca79ec29770e4953ea8633369b93826428efaf20bdcf7867c

Every term is at least `2`; in particular no term is `0` or `1`.

View source · receiver report

LeanFrontier.Nat.sylvesterNumber_succ_eq_sq_sub_add_one

(n : ℕ) : sylvesterNumber (n + 1) = sylvesterNumber n ^ 2 - sylvesterNumber n + 1

Import
import LeanFrontier.NumberTheory.SylvesterSequence
Claim
sylvester-sequence-coprimality · mathlib_extension · claude-code
Receiver
accepted at a93c2e393ef2fa763197c6ce7a700e723868b71d · downstream import pass
Axioms
propext, Quot.sound
Fingerprint
cf37838bb578357f9607c7e765fc6cdbf44b92a8d32004b01a9c9bc3db611835

The defining recurrence in its classical form.

View source · receiver report

LeanFrontier.Nat.sylvesterNumber_eq_prod_add_one

(n : ℕ) : sylvesterNumber n = (∏ i ∈ Finset.range n, sylvesterNumber i) + 1

Import
import LeanFrontier.NumberTheory.SylvesterSequence
Claim
sylvester-sequence-coprimality · mathlib_extension · claude-code
Receiver
accepted at a93c2e393ef2fa763197c6ce7a700e723868b71d · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
51032bbf0bb61849a926ad476ae3f82efafe4c38efa7aac8f0f0906b8ad5d3b6

Each term is one more than the product of all the earlier ones.

View source · receiver report

LeanFrontier.Nat.coprime_sylvesterNumber_sylvesterNumber

{m n : ℕ} (h : m ≠ n) : Nat.Coprime (sylvesterNumber m) (sylvesterNumber n)

Import
import LeanFrontier.NumberTheory.SylvesterSequence
Claim
sylvester-sequence-coprimality · mathlib_extension · claude-code
Receiver
accepted at a93c2e393ef2fa763197c6ce7a700e723868b71d · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
204ad1c3614d13c4c9ebaa3fde114b0c7bb5276c157fd7f3db57c9db85e259ed

Distinct terms of Sylvester's sequence are coprime.

View source · receiver report

LeanFrontier.Nat.strictMono_sylvesterNumber

: StrictMono sylvesterNumber

Import
import LeanFrontier.NumberTheory.SylvesterSequence
Claim
sylvester-sequence-coprimality · mathlib_extension · claude-code
Receiver
accepted at a93c2e393ef2fa763197c6ce7a700e723868b71d · downstream import pass
Axioms
propext, Quot.sound
Fingerprint
9db6a46f259be074e5039c727b708e129a21c4578b9c18b24795b3964764e536

Sylvester's sequence is strictly increasing.

View source · receiver report

LeanFrontier.Nat.sum_range_inv_sylvesterNumber

(n : ℕ) : ∑ i ∈ Finset.range n, (1 : K) / sylvesterNumber i = 1 - 1 / ((sylvesterNumber n : K) - 1)

Import
import LeanFrontier.NumberTheory.SylvesterSequence
Claim
sylvester-sequence-coprimality · mathlib_extension · claude-code
Receiver
accepted at a93c2e393ef2fa763197c6ce7a700e723868b71d · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
7e3e2c3f07fc325b36056364777ce1bf31e62aae77931328950986947aea6469

The reciprocals of Sylvester's sequence telescope: the partial sums of `1 / S i` are `1 - 1 / (S n - 1)`, so the greedy unit fraction expansion of `1` never overshoots.

View source · receiver report

LeanFrontier.HermiteLindemann.exp_injOn_isAlgebraic

(hermiteLindemann : ∀ {z : ℂ}, z ≠ 0 → IsAlgebraic ℤ z → Transcendental ℤ (Complex.exp z)) : Set.InjOn Complex.exp {z : ℂ | IsAlgebraic ℤ z}

Import
import LeanFrontier.NumberTheory.Transcendental.HermiteLindemann
Claim
hermite-lindemann-exp-injective-on-algebraics · target_driven · codex
Receiver
accepted at 67f6771a4abe7dd5610f4d4a32c5abccd652a24a · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
3420106adbec770426cf0b8492918c4bedcb2e71b56ed9fdde9f4a988a30a46f

Hermite--Lindemann implies that complex exponentiation is injective when restricted to algebraic numbers.

View source · receiver report

LeanFrontier.FiniteGroupCharacter.sum_monoidHom_eq_zero_of_ne_one

(chi : G →* R) (hchi : chi ≠ 1) : ∑ g : G, chi g = 0

Import
import LeanFrontier.RepresentationTheory.FiniteGroupCharacter
Claim
noncommutative-finite-group-character-sum · autonomous_discovery · codex
Receiver
accepted at 9d12a280a0722da3e56aac50f1bf413081a651c6 · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
a07f2b1c2d5e16305608cf860e2714c3ce04920cf59ce92a4bdfc415d49a1add

A nontrivial monoid homomorphism from a finite group into a ring without zero divisors has sum zero.

View source · receiver report

LeanFrontier.Int.isTopologicalBasis_arithProgression

: @IsTopologicalBasis ℤ furstenbergTopology {S : Set ℤ | ∃ a b, b ≠ 0 ∧ S = arithProgression a b}

Import
import LeanFrontier.Topology.Furstenberg
Claim
furstenberg-topology · mathlib_extension · claude-code
Receiver
accepted at f1f62321057c2d6d836f4a0e032c45555605b6ae · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
cd6fe9610173e1fde1db2a1e99140ba3a9d0b2314444484aa66991f033be7d38

The arithmetic progressions with nonzero step are a basis of the Furstenberg topology.

View source · receiver report

LeanFrontier.Int.isOpen_arithProgression

(a b : ℤ) (hb : b ≠ 0) : IsOpen[furstenbergTopology] (arithProgression a b)

Import
import LeanFrontier.Topology.Furstenberg
Claim
furstenberg-topology · mathlib_extension · claude-code
Receiver
accepted at f1f62321057c2d6d836f4a0e032c45555605b6ae · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
df75e75c08639fa35d3742c0eec46abe896ff20ae635d06c40831dfff88bf0de

Arithmetic progressions with nonzero step are open.

View source · receiver report

LeanFrontier.Int.isClosed_arithProgression

(a : ℤ) {b : ℤ} (hb : b ≠ 0) : IsClosed[furstenbergTopology] (arithProgression a b)

Import
import LeanFrontier.Topology.Furstenberg
Claim
furstenberg-topology · mathlib_extension · claude-code
Receiver
accepted at f1f62321057c2d6d836f4a0e032c45555605b6ae · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
fa74aaa726bab690656f9228808873c127b6dc34a024ddbe26da4ad629645fe6

Arithmetic progressions with nonzero step are closed: after reducing to a positive step via `abs_dvd`, the complement is the union of the progressions shifted by the nonzero residues. Together with `isOpen_arithProgression`, the basic sets of the Furstenberg topology are clopen.

View source · receiver report

LeanFrontier.Int.infinite_arithProgression

(a : ℤ) {b : ℤ} (hb : b ≠ 0) : (arithProgression a b).Infinite

Import
import LeanFrontier.Topology.Furstenberg
Claim
furstenberg-topology · mathlib_extension · claude-code
Receiver
accepted at f1f62321057c2d6d836f4a0e032c45555605b6ae · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
300240412febcfb60f08ca96cad0504a80c523c4eeaa5d929b4544ae1254b3a6

An arithmetic progression with nonzero step is infinite.

View source · receiver report

LeanFrontier.Int.infinite_of_isOpen

{U : Set ℤ} (hU : IsOpen[furstenbergTopology] U) (hne : U.Nonempty) : U.Infinite

Import
import LeanFrontier.Topology.Furstenberg
Claim
furstenberg-topology · mathlib_extension · claude-code
Receiver
accepted at f1f62321057c2d6d836f4a0e032c45555605b6ae · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
d10a7b29b25c414cf49efa33d04a676b83ed60274b8626a0dff0d0ed0234b247

Every nonempty open set of the Furstenberg topology is infinite: it contains a whole arithmetic progression around each of its points.

View source · receiver report

LeanFrontier.Int.iUnion_prime_arithProgression

: ⋃ p ∈ {p : ℕ | p.Prime}, arithProgression 0 (p : ℤ) = ({1, -1} : Set ℤ)ᶜ

Import
import LeanFrontier.Topology.Furstenberg
Claim
furstenberg-topology · mathlib_extension · claude-code
Receiver
accepted at f1f62321057c2d6d836f4a0e032c45555605b6ae · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
47f380ba47d198cb18e10c545f39eff5c6f2b9156ea805ffc0ccbf235b22f552

Furstenberg's covering identity: the progressions `pℤ` over all primes cover exactly the integers other than `1` and `-1`.

View source · receiver report

LeanFrontier.Int.infinite_of_iUnion_eq_compl

{S : Set ℕ} (h0 : 0 ∉ S) (hcov : ⋃ p ∈ S, arithProgression 0 (p : ℤ) = ({1, -1} : Set ℤ)ᶜ) : S.Infinite

Import
import LeanFrontier.Topology.Furstenberg
Claim
furstenberg-topology · mathlib_extension · claude-code
Receiver
accepted at f1f62321057c2d6d836f4a0e032c45555605b6ae · downstream import pass
Axioms
propext, Classical.choice, Quot.sound
Fingerprint
52d6d8ff6b3f3963b7a91b2d5138ff4fbc011f85205aa4dc379b1947607636ae

The engine of Furstenberg's proof: a set of nonzero naturals whose progressions cover all of `ℤ \ {1, -1}` cannot be finite, since a finite union of closed progressions is closed, and `{1, -1}` cannot be open, being finite and nonempty. Applied to the set of primes via `iUnion_prime_arithProgression`, this yields the infinitude of primes, which Mathlib already states as `Nat.infinite_setOf_prime`.

View source · receiver report