File: Mathlib/Geometry/Euclidean/PerpBisector.lean

full_name: AffineSubspace.perpBisector
code: /-- Perpendicular bisector of a segment in a Euclidean affine space. -/
def perpBisector (p₁ p₂ : P) : AffineSubspace ℝ P 
goal: AffineSubspace ℝ P

full_name: AffineSubspace.mem_perpBisector_iff_inner_eq_zero'
code: /-- A point `c` belongs the perpendicular bisector of `[p₁, p₂] iff `p₂ -ᵥ p₁` is orthogonal to
`c -ᵥ midpoint ℝ p₁ p₂`. -/
theorem mem_perpBisector_iff_inner_eq_zero' :
    c ∈ perpBisector p₁ p₂ ↔ ⟪p₂ -ᵥ p₁, c -ᵥ midpoint ℝ p₁ p₂⟫ = 0 
goal: c ∈ AffineSubspace.perpBisector p₁ p₂ ↔ ⟪p₂ -ᵥ p₁, c -ᵥ midpoint ℝ p₁ p₂⟫_ℝ = 0

full_name: AffineSubspace.mem_perpBisector_iff_inner_eq_zero
code: /-- A point `c` belongs the perpendicular bisector of `[p₁, p₂] iff `c -ᵥ midpoint ℝ p₁ p₂` is
orthogonal to `p₂ -ᵥ p₁`. -/
theorem mem_perpBisector_iff_inner_eq_zero :
    c ∈ perpBisector p₁ p₂ ↔ ⟪c -ᵥ midpoint ℝ p₁ p₂, p₂ -ᵥ p₁⟫ = 0 
goal: c ∈ AffineSubspace.perpBisector p₁ p₂ ↔ ⟪c -ᵥ midpoint ℝ p₁ p₂, p₂ -ᵥ p₁⟫_ℝ = 0

full_name: AffineSubspace.mem_perpBisector_iff_inner_pointReflection_vsub_eq_zero
code: theorem mem_perpBisector_iff_inner_pointReflection_vsub_eq_zero :
    c ∈ perpBisector p₁ p₂ ↔ ⟪Equiv.pointReflection c p₁ -ᵥ p₂, p₂ -ᵥ p₁⟫ = 0 
goal: c ∈ AffineSubspace.perpBisector p₁ p₂ ↔ ⟪(Equiv.pointReflection c) p₁ -ᵥ p₂, p₂ -ᵥ p₁⟫_ℝ = 0

full_name: AffineSubspace.mem_perpBisector_pointReflection_iff_inner_eq_zero
code: theorem mem_perpBisector_pointReflection_iff_inner_eq_zero :
    c ∈ perpBisector p₁ (Equiv.pointReflection p₂ p₁) ↔ ⟪c -ᵥ p₂, p₁ -ᵥ p₂⟫ = 0 
goal: c ∈ AffineSubspace.perpBisector p₁ ((Equiv.pointReflection p₂) p₁) ↔ ⟪c -ᵥ p₂, p₁ -ᵥ p₂⟫_ℝ = 0

full_name: AffineSubspace.midpoint_mem_perpBisector
code: theorem midpoint_mem_perpBisector (p₁ p₂ : P) :
    midpoint ℝ p₁ p₂ ∈ perpBisector p₁ p₂ 
goal: midpoint ℝ p₁ p₂ ∈ AffineSubspace.perpBisector p₁ p₂

full_name: AffineSubspace.perpBisector_nonempty
code: theorem perpBisector_nonempty : (perpBisector p₁ p₂ : Set P).Nonempty 
goal: (↑(AffineSubspace.perpBisector p₁ p₂)).Nonempty

full_name: AffineSubspace.direction_perpBisector
code: @[simp]
theorem direction_perpBisector (p₁ p₂ : P) :
    (perpBisector p₁ p₂).direction = (ℝ ∙ (p₂ -ᵥ p₁))ᗮ 
goal: (AffineSubspace.perpBisector p₁ p₂).direction = (Submodule.span ℝ {p₂ -ᵥ p₁})ᗮ

full_name: AffineSubspace.mem_perpBisector_iff_inner_eq_inner
code: theorem mem_perpBisector_iff_inner_eq_inner :
    c ∈ perpBisector p₁ p₂ ↔ ⟪c -ᵥ p₁, p₂ -ᵥ p₁⟫ = ⟪c -ᵥ p₂, p₁ -ᵥ p₂⟫ 
goal: c ∈ AffineSubspace.perpBisector p₁ p₂ ↔ ⟪c -ᵥ p₁, p₂ -ᵥ p₁⟫_ℝ = ⟪c -ᵥ p₂, p₁ -ᵥ p₂⟫_ℝ

full_name: AffineSubspace.mem_perpBisector_iff_inner_eq
code: theorem mem_perpBisector_iff_inner_eq :
    c ∈ perpBisector p₁ p₂ ↔ ⟪c -ᵥ p₁, p₂ -ᵥ p₁⟫ = (dist p₁ p₂) ^ 2 / 2 
goal: c ∈ AffineSubspace.perpBisector p₁ p₂ ↔ ⟪c -ᵥ p₁, p₂ -ᵥ p₁⟫_ℝ = dist p₁ p₂ ^ 2 / 2

full_name: AffineSubspace.mem_perpBisector_iff_dist_eq
code: theorem mem_perpBisector_iff_dist_eq : c ∈ perpBisector p₁ p₂ ↔ dist c p₁ = dist c p₂ 
goal: c ∈ AffineSubspace.perpBisector p₁ p₂ ↔ dist c p₁ = dist c p₂

full_name: AffineSubspace.mem_perpBisector_iff_dist_eq'
code: theorem mem_perpBisector_iff_dist_eq' : c ∈ perpBisector p₁ p₂ ↔ dist p₁ c = dist p₂ c 
goal: c ∈ AffineSubspace.perpBisector p₁ p₂ ↔ dist p₁ c = dist p₂ c

full_name: AffineSubspace.perpBisector_comm
code: theorem perpBisector_comm (p₁ p₂ : P) : perpBisector p₁ p₂ = perpBisector p₂ p₁ 
goal: AffineSubspace.perpBisector p₁ p₂ = AffineSubspace.perpBisector p₂ p₁

full_name: AffineSubspace.right_mem_perpBisector
code: @[simp] theorem right_mem_perpBisector : p₂ ∈ perpBisector p₁ p₂ ↔ p₁ = p₂ 
goal: p₂ ∈ AffineSubspace.perpBisector p₁ p₂ ↔ p₁ = p₂

full_name: AffineSubspace.left_mem_perpBisector
code: @[simp] theorem left_mem_perpBisector : p₁ ∈ perpBisector p₁ p₂ ↔ p₁ = p₂ 
goal: p₁ ∈ AffineSubspace.perpBisector p₁ p₂ ↔ p₁ = p₂

full_name: AffineSubspace.perpBisector_self
code: @[simp] theorem perpBisector_self (p : P) : perpBisector p p = ⊤ 
goal: AffineSubspace.perpBisector p p = ⊤

full_name: AffineSubspace.perpBisector_eq_top
code: @[simp] theorem perpBisector_eq_top : perpBisector p₁ p₂ = ⊤ ↔ p₁ = p₂ 
goal: AffineSubspace.perpBisector p₁ p₂ = ⊤ ↔ p₁ = p₂

full_name: AffineSubspace.perpBisector_ne_bot
code: @[simp] theorem perpBisector_ne_bot : perpBisector p₁ p₂ ≠ ⊥ 
goal: AffineSubspace.perpBisector p₁ p₂ ≠ ⊥

full_name: EuclideanGeometry.inner_vsub_vsub_of_dist_eq_of_dist_eq
code: /-- Suppose that `c₁` is equidistant from `p₁` and `p₂`, and the same applies to `c₂`. Then the
vector between `c₁` and `c₂` is orthogonal to that between `p₁` and `p₂`. (In two dimensions, this
says that the diagonals of a kite are orthogonal.) -/
theorem inner_vsub_vsub_of_dist_eq_of_dist_eq {c₁ c₂ p₁ p₂ : P} (hc₁ : dist p₁ c₁ = dist p₂ c₁)
    (hc₂ : dist p₁ c₂ = dist p₂ c₂) : ⟪c₂ -ᵥ c₁, p₂ -ᵥ p₁⟫ = 0 
goal: ⟪c₂ -ᵥ c₁, p₂ -ᵥ p₁⟫_ℝ = 0

full_name: Isometry.preimage_perpBisector
code: theorem Isometry.preimage_perpBisector {f : P → P'} (h : Isometry f) (p₁ p₂ : P) :
    f ⁻¹' (perpBisector (f p₁) (f p₂)) = perpBisector p₁ p₂ 
goal: f ⁻¹' ↑(AffineSubspace.perpBisector (f p₁) (f p₂)) = ↑(AffineSubspace.perpBisector p₁ p₂)

full_name: Isometry.mapsTo_perpBisector
code: theorem Isometry.mapsTo_perpBisector {f : P → P'} (h : Isometry f) (p₁ p₂ : P) :
    MapsTo f (perpBisector p₁ p₂) (perpBisector (f p₁) (f p₂)) 
goal: Set.MapsTo f ↑(AffineSubspace.perpBisector p₁ p₂) ↑(AffineSubspace.perpBisector (f p₁) (f p₂))