Documentation

LeanPool.ConwaySoifer.Geometry.Symmetry

The symmetry group of the target triangle #

rot (rotation by 120 degrees) and refl (a, b) = (b, a) preserve sqDist, the target triangle, the hexagon, permute the ten anchors and transport full ray lengths. A configuration is relabelled along the induced anchor permutation, so that the minimal full side section can be moved to vertex 0, towards vertex 5 (external side) or towards vertex 1 (internal side).

Reflection that exchanges the two triangular coordinates.

Equations
Instances For
    theorem ConwaySoifer.refl_add (p q : Point) :
    refl (p + q) = refl p + refl q
    theorem ConwaySoifer.refl_smul (t : ℝ) (p : Point) :
    refl (t • p) = t • refl p
    theorem ConwaySoifer.refl_sub (p q : Point) :
    refl (p - q) = refl p - refl q

    Rotation through 120 degrees as a real linear map.

    Equations
    Instances For

      Coordinate reflection as a real linear map.

      Equations
      Instances For

        Anchor permutations #

        def ConwaySoifer.rotIdx :
        Fin 10 → Fin 10

        rot sends anchor i to anchor (rotIdx i): centre fixed, v_i ↦ v_{i+2}, w_j ↦ w_{j+1}.

        Equations
        Instances For

          The inverse owner permutation induced by rotation of the target.

          Equations
          Instances For

            refl sends v_i ↦ v_{1-i}, w_0 ↦ w_0, w_1 ↔ w_2.

            Equations
            Instances For

              The corner permutation of refl.

              Equations
              Instances For
                theorem ConwaySoifer.rot_vertex (i : Fin 6) :
                rot (vertex i) = vertex (i + 2)
                theorem ConwaySoifer.rot_corner (j : Fin 3) :
                rot (corner j) = corner (j + 1)
                theorem ConwaySoifer.rot_sideDirection (i : Fin 6) (right : Bool) :
                rot (sideDirection i right) = sideDirection (i + 2) right
                theorem ConwaySoifer.refl_sideDirection (i : Fin 6) (right : Bool) :
                refl (sideDirection i right) = sideDirection (1 - i) !right
                theorem ConwaySoifer.rot_coreVertex (u : ℝ) (j : Fin 6) :
                rot (coreVertex u j) = coreVertex u (j + 2)
                theorem ConwaySoifer.rot_cornerMid (j : Fin 3) (m : Fin 2) :
                rot (cornerMid j m) = cornerMid (j + 1) m
                theorem ConwaySoifer.refl_cornerMid (j : Fin 3) (m : Fin 2) :

                Transformed triangles and configurations #

                The image of a triangle under an isometry given as a linear map.

                Equations
                • T.mapIso f hf = { vertices := fun (i : Fin 3) => f (T.vertices i), side := T.side, side_nonneg := ⋯, equilateral := ⋯ }
                Instances For
                  theorem ConwaySoifer.EquilateralTriangle.mem_mapIso (T : EquilateralTriangle) (f : Point →ₗ[ℝ] Point) (hf : ∀ (p q : Point), sqDist (f p) (f q) = sqDist p q) (hinj : Function.Injective ⇑f) (p : Point) :
                  f p ∈ (T.mapIso f hf).carrier ↔ p ∈ T.carrier
                  theorem ConwaySoifer.rayLen_mapIso (T : EquilateralTriangle) (f : Point →ₗ[ℝ] Point) (hf : ∀ (p q : Point), sqDist (f p) (f q) = sqDist p q) (hinj : Function.Injective ⇑f) (v d : Point) :
                  rayLen (T.mapIso f hf) (f v) (f d) = rayLen T v d
                  def ConwaySoifer.Configuration.transform (T : Configuration) (f : Point →ₗ[ℝ] Point) (hf : ∀ (p q : Point), sqDist (f p) (f q) = sqDist p q) (σinv : Fin 10 → Fin 10) :

                  Relabelled and transformed configuration: owner i of the new configuration is the image of the owner of the anchor sent to anchor i.

                  Equations
                  Instances For
                    theorem ConwaySoifer.Configuration.transform_common {T : Configuration} {r : ℝ} (h : CommonSide T r) (f : Point →ₗ[ℝ] Point) (hf : ∀ (p q : Point), sqDist (f p) (f q) = sqDist p q) (σinv : Fin 10 → Fin 10) :
                    CommonSide (T.transform f hf σinv) r
                    theorem ConwaySoifer.Configuration.transform_covers {T : Configuration} (h : Covers T) (f : Point →ₗ[ℝ] Point) (hf : ∀ (p q : Point), sqDist (f p) (f q) = sqDist p q) (hbij : Function.Bijective ⇑f) (htarget : ∀ (p : Point), f p ∈ target ↔ p ∈ target) (σinv : Fin 10 → Fin 10) (hσ : Function.Surjective σinv) :
                    Covers (T.transform f hf σinv)
                    theorem ConwaySoifer.Configuration.transform_anchored {T : Configuration} (h : ∀ (i : Fin 10), anchor i ∈ (T i).carrier) (f : Point →ₗ[ℝ] Point) (hf : ∀ (p q : Point), sqDist (f p) (f q) = sqDist p q) (hinj : Function.Injective ⇑f) (σ σinv : Fin 10 → Fin 10) (hσ : ∀ (i : Fin 10), σ (σinv i) = i) (hanchor : ∀ (i : Fin 10), f (anchor i) = anchor (σ i)) (i : Fin 10) :
                    anchor i ∈ (T.transform f hf σinv i).carrier
                    theorem ConwaySoifer.rotate_anchored {T : Configuration} (h : ∀ (i : Fin 10), anchor i ∈ (T i).carrier) (i : Fin 10) :
                    theorem ConwaySoifer.reflect_anchored {T : Configuration} (h : ∀ (i : Fin 10), anchor i ∈ (T i).carrier) (i : Fin 10) :
                    theorem ConwaySoifer.mem_rotate (T : Configuration) (i : Fin 10) (p : Point) :

                    Membership transport for the rotated owners.

                    theorem ConwaySoifer.rayLen_rotate (T : Configuration) (i : Fin 10) (v d : Point) :
                    rayLen (T.rotate (rotIdx i)) (rot v) (rot d) = rayLen (T i) v d
                    theorem ConwaySoifer.rayLen_reflect (T : Configuration) (i : Fin 10) (v d : Point) :
                    rayLen (T.reflect (reflIdx i)) (refl v) (refl d) = rayLen (T i) v d
                    theorem ConwaySoifer.sideLen_rotate (T : Configuration) (i : Fin 6) (right : Bool) :
                    rayLen (T.rotate (sideIndex (i + 2))) (vertex (i + 2)) (sideDirection (i + 2) right) = rayLen (T (sideIndex i)) (vertex i) (sideDirection i right)

                    Side sections of the rotated configuration.

                    theorem ConwaySoifer.sideLen_reflect (T : Configuration) (i : Fin 6) (right : Bool) :
                    rayLen (T.reflect (sideIndex (1 - i))) (vertex (1 - i)) (sideDirection (1 - i) !right) = rayLen (T (sideIndex i)) (vertex i) (sideDirection i right)
                    theorem ConwaySoifer.cornerLen_rotate (T : Configuration) (j : Fin 3) (m : Fin 2) :
                    rayLen (T.rotate (cornerIndex (j + 1))) (corner (j + 1)) (cornerDirection (j + 1) m) = rayLen (T (cornerIndex j)) (corner j) (cornerDirection j m)