FormalConjectures/Wikipedia/MovingSofa.lean

GitHub source file

Explanation legend Lean4 Domain Explanation Language (L4DEL)

L4DEL explanations are a separate layer. They do not change the Lean source. Intuition is explanatory prose; numbered items are a reading path; sources link the wording back to evidence.

L4DEL
Lean4 Domain Explanation Language

Credit: The upstream authors and contributors retain credit for the project and mathematics. lean4-explainer only renders their pinned source and adds the separately disclosed explanation layer.

Project sources: Pinned project documentation, Formal Conjectures paper, arXiv v1

28 declarations, 5 contain sorry, 0 declared as axioms

Moving Sofa Problem

References:

Imports (1)
  1. def MovingSofa.horizontalHallway The horizontal side of the hallway is $(-\infty, 1] \times [0, 1]$ line 40 source

    Source documentation

    The horizontal side of the hallway is $(-\infty, 1] \times [0, 1]$.

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Set, EuclideanSpace, Real, Fin, OfNat.ofNat, Nat

    Proof uses: Set.ofPred, Exists, And, LE.le, Eq, WithLp, ENNReal, WithLp.toLp, Matrix.vecCons, Matrix.vecEmpty

    12 instances, coercions and auxiliary constants left out.

    def horizontalHallway : Set ℝ² := {!₂[x, y] | (x) (y) (_ : x ≤ 1 ∧ 0 ≤ y ∧ y ≤ 1)}
  2. def MovingSofa.verticalHallway The vertical side of the hallway is $[0, 1] \times (-\infty, 1]$ line 43 source

    Source documentation

    The vertical side of the hallway is $[0, 1] \times (-\infty, 1]$.

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Set, EuclideanSpace, Real, Fin, OfNat.ofNat, Nat

    Proof uses: Set.ofPred, Exists, And, LE.le, Eq, WithLp, ENNReal, WithLp.toLp, Matrix.vecCons, Matrix.vecEmpty

    12 instances, coercions and auxiliary constants left out.

    def verticalHallway : Set ℝ² := {!₂[x, y] | (x) (y) (_ : 0 ≤ x ∧ x ≤ 1 ∧ y ≤ 1)}
  3. def MovingSofa.hallway The hallway is the union of its horizontal and vertical sides line 46 source

    Source documentation

    The hallway is the union of its horizontal and vertical sides.

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Set, EuclideanSpace, Real, Fin, OfNat.ofNat, Nat

    Proof uses: Union.union, MovingSofa.horizontalHallway, MovingSofa.verticalHallway

    3 instances, coercions and auxiliary constants left out.

    def hallway : Set ℝ² := horizontalHallway ∪ verticalHallway
    …

    Mentions: MovingSofa.horizontalHallway, MovingSofa.verticalHallway

  4. instance MovingSofa.(instance at line 50) line 50 source
  5. structure MovingSofa.IsMovingSofa A connected closed set line 59 source

    Source documentation

    A connected closed set $s$ is a moving sofa according to a rigid motion $m:I\to\mathrm{SE}(2)$, if the sofa is initially in the horizontal side of the hallway and ends up in the vertical side. Here, since $\mathrm{SE}(2)$ is not in Mathlib yet, we use $\mathrm{E}(2)$ and rely on continuity and $m(0) = \mathrm{id}$ to ensure $m$ is in $\mathrm{SE}(2)$.

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Set, EuclideanSpace, Real, Fin, OfNat.ofNat, Nat, unitInterval, AffineIsometryEquiv, ENNReal

    23 instances, coercions and auxiliary constants left out.

    structure IsMovingSofa (s : Set ℝ²) (m : I → E(2)) : Prop where
    …
  6. def MovingSofa.unitSquare The unit square line 69 source

    Source documentation

    The unit square.

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Set, EuclideanSpace, Real, Fin, OfNat.ofNat, Nat

    Proof uses: parallelepiped, ENNReal, OrthonormalBasis, EuclideanSpace.basisFun

    31 instances, coercions and auxiliary constants left out.

    def unitSquare : Set ℝ² := parallelepiped (EuclideanSpace.basisFun (Fin 2) ℝ)
    …
  7. lemma MovingSofa.mem_Icc_of_mem_unitSquare Coordinates of points in the unit square lie in [0,1] line 73 source

    Source documentation

    Coordinates of points in the unit square lie in [0,1].

    private lemma mem_Icc_of_mem_unitSquare {p : ℝ²} (hp : p ∈ unitSquare) (i : Fin 2) :
        p i ∈ Set.Icc (0:ℝ) 1 := by
    …

    Mentions: MovingSofa.unitSquare

  8. theorem MovingSofa.isMovingSofa_unitSquare The unit square $[0,1]^2$ is a valid moving sofa (with the identity motion) line 87 source

    Source documentation

    The unit square $[0,1]^2$ is a valid moving sofa (with the identity motion). It sits in the corner where both hallways overlap, so the stationary motion works. This is a sanity check that the IsMovingSofa definition is not vacuous.

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Exists, Real, unitInterval, AffineIsometryEquiv, EuclideanSpace, Fin, OfNat.ofNat, Nat, ENNReal, MovingSofa.IsMovingSofa, MovingSofa.unitSquare

    Proof uses: Exists.intro, AffineIsometryEquiv.refl, MovingSofa.IsMovingSofa.mk, id, IsConnected, parallelepiped, OrthonormalBasis, EuclideanSpace.basisFun, And.intro, Set.Nonempty, Set.image, Finset.sum, Finset.univ, HSMul.hSMul, Set.Icc, IsPreconnected, Membership.mem, Set, And, Eq and 66 more

    196 instances, coercions and auxiliary constants left out.

    Tactic trace: 40 steps

    Open to load the checked before-and-after goal states.

    theorem isMovingSofa_unitSquare : ∃ m, IsMovingSofa unitSquare m := by
    …

    Mentions: MovingSofa.IsMovingSofa, MovingSofa.unitSquare

  9. def MovingSofa.rotateTranslate The rigid motion that translates by $p$ and then rotates counterclockwise by $\alpha$ line 120 source

    Source documentation

    The rigid motion that translates by $p$ and then rotates counterclockwise by $\alpha$. Note that [Ge92] used this definition while [Ro18] used rotation first and then translation.

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Real.Angle, EuclideanSpace, Real, Fin, OfNat.ofNat, Nat, AffineIsometryEquiv, ENNReal

    Proof uses: AffineIsometryEquiv.trans, AffineIsometryEquiv.vaddConst, LinearIsometryEquiv.toAffineIsometryEquiv, Orientation.rotation, EuclideanGeometry.o

    57 instances, coercions and auxiliary constants left out.

    def rotateTranslate (α : Real.Angle) (p : ℝ²) : E(2) :=
    …
  10. theorem MovingSofa.rotateTranslate_apply rotateTranslate α p sends $q$ to $R_\alpha(q + p)$: the translation is applied first line 126 source

    Source documentation

    rotateTranslate α p sends $q$ to $R_\alpha(q + p)$: the translation is applied first.

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Real.Angle, EuclideanSpace, Real, Fin, OfNat.ofNat, Nat, Eq, AffineIsometryEquiv, ENNReal, MovingSofa.rotateTranslate, LinearIsometryEquiv, RingHom.id, Orientation.rotation, EuclideanGeometry.o, HAdd.hAdd

    Proof uses: rfl

    73 instances, coercions and auxiliary constants left out.

    theorem rotateTranslate_apply (α : Real.Angle) (p q : ℝ²) :
        rotateTranslate α p q = EuclideanGeometry.o.rotation α (q + p) := rfl

    Mentions: MovingSofa.rotateTranslate

  11. def MovingSofa.sofaOfRotateTranslatePath The sofa according to a rotation path line 135 source

    Source documentation

    The sofa according to a rotation path $p : [0, \pi/2] \to \mathbb{R}^2$ as in [Ge92] is the intersection over $\alpha \in [0, \pi/2]$ of hallways each translated by $p(\alpha)$ and then rotated by $\alpha$, with the special cases that the hallway at $0$ is the horizontal side and the hallway at $\pi/2$ is the vertical side.

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Real, EuclideanSpace, Fin, OfNat.ofNat, Nat, Set

    Proof uses: Inter.inter, Set.image, AffineIsometryEquiv, ENNReal, MovingSofa.rotateTranslate, Real.Angle, MovingSofa.horizontalHallway, HDiv.hDiv, Real.pi, MovingSofa.verticalHallway, Set.iInter, Membership.mem, Set.Icc, MovingSofa.hallway

    44 instances, coercions and auxiliary constants left out.

    def sofaOfRotateTranslatePath (p : ℝ → ℝ²) : Set ℝ² :=
    …
  12. def MovingSofa.GerversSofa.ABφθSpec Eq. 1-4 of [Ro18], which specifies the constants $A$, $B$, $\varphi$, and $\theta$ of [Ge92] line 151 source

    Source documentation

    Eq. 1-4 of [Ro18], which specifies the constants $A$, $B$, $\varphi$, and $\theta$ of [Ge92].

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Real

    Proof uses: And, LE.le, OfNat.ofNat, HDiv.hDiv, Real.pi, Eq, HAdd.hAdd, HSub.hSub, HMul.hMul, Real.cos, Real.sin, HPow.hPow, Nat

    24 instances, coercions and auxiliary constants left out.

    def ABφθSpec (A B φ θ : ℝ) : Prop :=
    …

    Mentions: MovingSofa.GerversSofa.A, MovingSofa.GerversSofa.B, MovingSofa.GerversSofa.φ, MovingSofa.GerversSofa.θ

  13. theorem MovingSofa.GerversSofa.ABφθSpec.existsUnique sorry line 163 source

    depends on sorry what this means

    Statement uses: ExistsUnique, Prod, Real, MovingSofa.GerversSofa.ABφθSpec, Prod.fst, Prod.snd

    Proof uses: sorryAx, Lean.Name, Bool.false, Lean.Name.num, Lean.Name.str, Lean.Name.anonymous, OfNat.ofNat, Nat

    1 instances, coercions and auxiliary constants left out.

  14. def MovingSofa.GerversSofa.A line 167 source

    depends on sorry what this means

    Statement uses: Real

    Proof uses: Prod.fst, Prod, Exists.choose, And, MovingSofa.GerversSofa.ABφθSpec, Prod.snd, Eq, MovingSofa.GerversSofa.ABφθSpec.existsUnique

  15. def MovingSofa.GerversSofa.B line 168 source

    depends on sorry what this means

    Statement uses: Real

    Proof uses: Prod.fst, Prod, Prod.snd, Exists.choose, And, MovingSofa.GerversSofa.ABφθSpec, Eq, MovingSofa.GerversSofa.ABφθSpec.existsUnique

  16. def MovingSofa.GerversSofa.φ line 169 source

    depends on sorry what this means

    Statement uses: Real

    Proof uses: Prod.fst, Prod.snd, Prod, Exists.choose, And, MovingSofa.GerversSofa.ABφθSpec, Eq, MovingSofa.GerversSofa.ABφθSpec.existsUnique

  17. def MovingSofa.GerversSofa.θ line 170 source

    depends on sorry what this means

    Statement uses: Real

    Proof uses: Prod.snd, Prod, Exists.choose, And, MovingSofa.GerversSofa.ABφθSpec, Prod.fst, Eq, MovingSofa.GerversSofa.ABφθSpec.existsUnique

  18. def MovingSofa.GerversSofa.r line 172 source

    depends on sorry what this means

    Statement uses: Real

    Proof uses: ite, LE.le, MovingSofa.GerversSofa.φ, HDiv.hDiv, OfNat.ofNat, MovingSofa.GerversSofa.θ, HSub.hSub, HAdd.hAdd, MovingSofa.GerversSofa.A, Real.pi, MovingSofa.GerversSofa.B, HMul.hMul, HPow.hPow, Nat

    24 instances, coercions and auxiliary constants left out.

  19. def MovingSofa.GerversSofa.y line 184 source

    depends on sorry what this means

    Statement uses: Real

    Proof uses: intervalIntegral, HMul.hMul, MovingSofa.GerversSofa.r, Real.sin, HSub.hSub, HDiv.hDiv, Real.pi, OfNat.ofNat, MovingSofa.GerversSofa.φ, MeasureTheory.MeasureSpace.volume

    16 instances, coercions and auxiliary constants left out.

  20. def MovingSofa.GerversSofa.x line 187 source

    depends on sorry what this means

    Statement uses: Real

    Proof uses: HSub.hSub, OfNat.ofNat, intervalIntegral, HMul.hMul, MovingSofa.GerversSofa.r, Real.cos, HDiv.hDiv, Real.pi, MovingSofa.GerversSofa.φ, MeasureTheory.MeasureSpace.volume

    18 instances, coercions and auxiliary constants left out.

  21. def MovingSofa.GerversSofa.p line 190 source

    depends on sorry what this means

    Statement uses: Real, EuclideanSpace, Fin, OfNat.ofNat, Nat

    Proof uses: WithLp.toLp, ENNReal, Matrix.vecCons, ite, LE.le, MovingSofa.GerversSofa.φ, HSub.hSub, Real.cos, HAdd.hAdd, HMul.hMul, MovingSofa.GerversSofa.x, HDiv.hDiv, Real.pi, MovingSofa.GerversSofa.y, Real.sin, Neg.neg, Matrix.vecEmpty

    26 instances, coercions and auxiliary constants left out.

  22. def MovingSofa.gerversSofa Gerver's sofa is the sofa according to the rotation path GerversSofa.p line 201 source

    Source documentation

    Gerver's sofa is the sofa according to the rotation path GerversSofa.p.

    depends on sorry what this means

    Statement uses: Set, EuclideanSpace, Real, Fin, OfNat.ofNat, Nat

    Proof uses: MovingSofa.sofaOfRotateTranslatePath, MovingSofa.GerversSofa.p

    1 instances, coercions and auxiliary constants left out.

    def gerversSofa : Set ℝ² :=
    …
  23. theorem MovingSofa.isMovingSofa_gerversSofa sorry line 208 source

    depends on sorry what this means

    Statement uses: Exists, Real, unitInterval, AffineIsometryEquiv, EuclideanSpace, Fin, OfNat.ofNat, Nat, ENNReal, MovingSofa.IsMovingSofa, MovingSofa.gerversSofa

    Proof uses: sorryAx, Lean.Name, Bool.false, Lean.Name.num, Lean.Name.str, Lean.Name.anonymous

    46 instances, coercions and auxiliary constants left out.

    Tactic trace: 1 steps

    Open to load the checked before-and-after goal states.

  24. def MovingSofa.sofaConstant The sofa constant is the maximal area of a moving sofa line 215 source

    Source documentation

    The sofa constant is the maximal area of a moving sofa.

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: ENNReal

    Proof uses: iSup, Set, EuclideanSpace, Real, Fin, OfNat.ofNat, Nat, Exists, unitInterval, AffineIsometryEquiv, MovingSofa.IsMovingSofa, MeasureTheory.Measure, MeasureTheory.MeasureSpace.volume

    40 instances, coercions and auxiliary constants left out.

    def sofaConstant : ℝ≥0∞ := ⨆ (s : Set ℝ²) (_ : ∃ m, IsMovingSofa s m), volume s
    …

    Mentions: MovingSofa.IsMovingSofa

  25. theorem MovingSofa.one_le_sofaConstant The sofa constant is at least 1, as witnessed by the unit square line 219 source

    Source documentation

    The sofa constant is at least 1, as witnessed by the unit square.

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: LE.le, ENNReal, OfNat.ofNat, MovingSofa.sofaConstant

    Proof uses: Trans.trans, Eq, MeasureTheory.Measure, EuclideanSpace, Real, Fin, Nat, Set, MeasureTheory.MeasureSpace.volume, MovingSofa.unitSquare, Eq.symm, parallelepiped, OrthonormalBasis, EuclideanSpace.basisFun, OrthonormalBasis.volume_parallelepiped, le_iSup₂, Exists, unitInterval, AffineIsometryEquiv, MovingSofa.IsMovingSofa and 1 more

    73 instances, coercions and auxiliary constants left out.

    Tactic trace: 1 steps

    Open to load the checked before-and-after goal states.

    theorem one_le_sofaConstant : 1 ≤ sofaConstant := by
    …

    Mentions: MovingSofa.sofaConstant

  26. theorem MovingSofa.sofaConstant_eq sorry line 228 source

    depends on sorry what this means

    Statement uses: Eq, ENNReal, MovingSofa.sofaConstant, MeasureTheory.Measure, EuclideanSpace, Real, Fin, OfNat.ofNat, Nat, Set, MeasureTheory.MeasureSpace.volume, MovingSofa.gerversSofa

    Proof uses: sorryAx, Lean.Name, Bool.false, Lean.Name.num, Lean.Name.str, Lean.Name.anonymous

    94 instances, coercions and auxiliary constants left out.

    Tactic trace: 1 steps

    Open to load the checked before-and-after goal states.

  27. theorem MovingSofa.sofaConstant_eq_volume_gerversSofa sorry line 235 source

    depends on sorry what this means

    Statement uses: Eq, ENNReal, MovingSofa.sofaConstant, MeasureTheory.Measure, EuclideanSpace, Real, Fin, OfNat.ofNat, Nat, Set, MeasureTheory.MeasureSpace.volume, MovingSofa.gerversSofa

    Proof uses: sorryAx, Lean.Name, Bool.false, Lean.Name.num, Lean.Name.str, Lean.Name.anonymous

    94 instances, coercions and auxiliary constants left out.

    Tactic trace: 1 steps

    Open to load the checked before-and-after goal states.

  28. theorem MovingSofa.volume_eq_sofaConstant_iff_congruent_gerversSofa Gerver's sofa is the unique sofa that attains the sofa constant, up to a rigid motion sorry line 246 source

    Source documentation

    Gerver's sofa is the unique sofa that attains the sofa constant, up to a rigid motion.

    The motion is needed: horizontalHallway is $(-\infty, 1] \times [0, 1]$, so a leftward translate of any moving sofa is again one, obtained by sliding right and then following the original motion. It has the same area, so uniqueness cannot hold on the nose.

    depends on sorry what this means

    Statement uses: Set, EuclideanSpace, Real, Fin, OfNat.ofNat, Nat, Exists, unitInterval, AffineIsometryEquiv, ENNReal, MovingSofa.IsMovingSofa, Iff, Eq, MeasureTheory.Measure, MeasureTheory.MeasureSpace.volume, MovingSofa.sofaConstant, Set.image, MovingSofa.gerversSofa

    Proof uses: sorryAx, Lean.Name, Bool.false, Lean.Name.num, Lean.Name.str, Lean.Name.anonymous

    122 instances, coercions and auxiliary constants left out.

    Tactic trace: 1 steps

    Open to load the checked before-and-after goal states.

    theorem volume_eq_sofaConstant_iff_congruent_gerversSofa (s : Set ℝ²)
        (hs : ∃ m, IsMovingSofa s m) :
        volume s = sofaConstant ↔ ∃ g : E(2), s = g '' gerversSofa := by
    …

    Mentions: MovingSofa.IsMovingSofa, MovingSofa.sofaConstant, MovingSofa.gerversSofa