File: Mathlib/LinearAlgebra/Projectivization/Basic.lean

full_name: projectivizationSetoid
code: /-- The setoid whose quotient is the projectivization of `V`. -/
def projectivizationSetoid : Setoid { v : V // v ≠ 0 } 
goal: Setoid { v // v ≠ 0 }

full_name: Projectivization
code: /-- The projectivization of the `K`-vector space `V`.
The notation `ℙ K V` is preferred. -/
def Projectivization 
goal: Type u_2

full_name: LinearAlgebra.Projectivization._aux_Mathlib_LinearAlgebra_Projectivization_Basic___unexpand_Projectivization_1
code: /-- We define notations `ℙ K V` for the projectivization of the `K`-vector space `V`. -/
scoped[LinearAlgebra.Projectivization] notation "ℙ" => Projectivization
goal: Lean.PrettyPrinter.Unexpander

full_name: LinearAlgebra.Projectivization._aux_Mathlib_LinearAlgebra_Projectivization_Basic___macroRules_LinearAlgebra_Projectivization_termℙ_1
code: /-- We define notations `ℙ K V` for the projectivization of the `K`-vector space `V`. -/
scoped[LinearAlgebra.Projectivization] notation "ℙ" => Projectivization
goal: Lean.Macro

full_name: Projectivization.mk
code: /-- Construct an element of the projectivization from a nonzero vector. -/
def mk (v : V) (hv : v ≠ 0) : ℙ K V 
goal: Projectivization K V

full_name: Projectivization.mk'
code: /-- A variant of `Projectivization.mk` in terms of a subtype. `mk` is preferred. -/
def mk' (v : { v : V // v ≠ 0 }) : ℙ K V 
goal: Projectivization K V

full_name: Projectivization.mk'_eq_mk
code: @[simp]
theorem mk'_eq_mk (v : { v : V // v ≠ 0 }) : mk' K v = mk K ↑v v.2 
goal: Projectivization.mk' K v = Projectivization.mk K ↑v ⋯

full_name: Projectivization.instNonemptyOfNontrivial
code: instance [Nontrivial V] : Nonempty (ℙ K V) 
goal: Nonempty (Projectivization K V)

full_name: Projectivization.rep
code: /-- Choose a representative of `v : Projectivization K V` in `V`. -/
protected noncomputable def rep (v : ℙ K V) : V 
goal: V

full_name: Projectivization.rep_nonzero
code: theorem rep_nonzero (v : ℙ K V) : v.rep ≠ 0 
goal: v.rep ≠ 0

full_name: Projectivization.mk_rep
code: @[simp]
theorem mk_rep (v : ℙ K V) : mk K v.rep v.rep_nonzero = v 
goal: Projectivization.mk K v.rep ⋯ = v

full_name: Projectivization.submodule
code: /-- Consider an element of the projectivization as a submodule of `V`. -/
protected def submodule (v : ℙ K V) : Submodule K V 
goal: Submodule K V

full_name: Projectivization.mk_eq_mk_iff
code: theorem mk_eq_mk_iff (v w : V) (hv : v ≠ 0) (hw : w ≠ 0) :
    mk K v hv = mk K w hw ↔ ∃ a : Kˣ, a • w = v 
goal: Projectivization.mk K v hv = Projectivization.mk K w hw ↔ ∃ a, a • w = v

full_name: Projectivization.mk_eq_mk_iff'
code: /-- Two nonzero vectors go to the same point in projective space if and only if one is
a scalar multiple of the other. -/
theorem mk_eq_mk_iff' (v w : V) (hv : v ≠ 0) (hw : w ≠ 0) :
    mk K v hv = mk K w hw ↔ ∃ a : K, a • w = v 
goal: Projectivization.mk K v hv = Projectivization.mk K w hw ↔ ∃ a, a • w = v

full_name: Projectivization.exists_smul_eq_mk_rep
code: theorem exists_smul_eq_mk_rep (v : V) (hv : v ≠ 0) : ∃ a : Kˣ, a • v = (mk K v hv).rep 
goal: ∃ a, a • v = (Projectivization.mk K v hv).rep

full_name: Projectivization.ind
code: /-- An induction principle for `Projectivization`. Use as `induction v`. -/
@[elab_as_elim, cases_eliminator, induction_eliminator]
theorem ind {P : ℙ K V → Prop} (h : ∀ (v : V) (h : v ≠ 0), P (mk K v h)) : ∀ p, P p 
goal: P p

full_name: Projectivization.submodule_mk
code: @[simp]
theorem submodule_mk (v : V) (hv : v ≠ 0) : (mk K v hv).submodule = K ∙ v 
goal: (Projectivization.mk K v hv).submodule = Submodule.span K {v}

full_name: Projectivization.submodule_eq
code: theorem submodule_eq (v : ℙ K V) : v.submodule = K ∙ v.rep 
goal: v.submodule = Submodule.span K {v.rep}

full_name: Projectivization.finrank_submodule
code: theorem finrank_submodule (v : ℙ K V) : finrank K v.submodule = 1 
goal: FiniteDimensional.finrank K ↥v.submodule = 1

full_name: Projectivization.instFiniteDimensionalSubtypeMemSubmoduleSubmodule
code: instance (v : ℙ K V) : FiniteDimensional K v.submodule 
goal: FiniteDimensional K ↥v.submodule

full_name: Projectivization.submodule_injective
code: theorem submodule_injective :
    Function.Injective (Projectivization.submodule : ℙ K V → Submodule K V) 
goal: Function.Injective Projectivization.submodule

full_name: Projectivization.equivSubmodule
code: /-- The equivalence between the projectivization and the
collection of subspaces of dimension 1. -/
noncomputable def equivSubmodule : ℙ K V ≃ { H : Submodule K V // finrank K H = 1 } 
goal: Projectivization K V ≃ { H // FiniteDimensional.finrank K ↥H = 1 }

full_name: Projectivization.mk''
code: /-- Construct an element of the projectivization from a subspace of dimension 1. -/
noncomputable def mk'' (H : Submodule K V) (h : finrank K H = 1) : ℙ K V 
goal: Projectivization K V

full_name: Projectivization.submodule_mk''
code: @[simp]
theorem submodule_mk'' (H : Submodule K V) (h : finrank K H = 1) : (mk'' H h).submodule = H 
goal: (Projectivization.mk'' H h).submodule = H

full_name: Projectivization.mk''_submodule
code: @[simp]
theorem mk''_submodule (v : ℙ K V) : mk'' v.submodule v.finrank_submodule = v 
goal: Projectivization.mk'' v.submodule ⋯ = v

full_name: Projectivization.map
code: /-- An injective semilinear map of vector spaces induces a map on projective spaces. -/
def map {σ : K →+* L} (f : V →ₛₗ[σ] W) (hf : Function.Injective f) : ℙ K V → ℙ L W 
goal: Projectivization K V → Projectivization L W

full_name: Projectivization.map_mk
code: theorem map_mk {σ : K →+* L} (f : V →ₛₗ[σ] W) (hf : Function.Injective f) (v : V) (hv : v ≠ 0) :
    map f hf (mk K v hv) = mk L (f v) (map_zero f ▸ hf.ne hv) 
goal: Projectivization.map f hf (Projectivization.mk K v hv) = Projectivization.mk L (f v) ⋯

full_name: Projectivization.map_injective
code: /-- Mapping with respect to a semilinear map over an isomorphism of fields yields
an injective map on projective spaces. -/
theorem map_injective {σ : K →+* L} {τ : L →+* K} [RingHomInvPair σ τ] (f : V →ₛₗ[σ] W)
    (hf : Function.Injective f) : Function.Injective (map f hf) 
goal: Function.Injective (Projectivization.map f hf)

full_name: Projectivization.map_id
code: @[simp]
theorem map_id : map (LinearMap.id : V →ₗ[K] V) (LinearEquiv.refl K V).injective = id 
goal: Projectivization.map LinearMap.id ⋯ = id

full_name: Projectivization.map_comp
code: theorem map_comp {F U : Type*} [Field F] [AddCommGroup U] [Module F U] {σ : K →+* L} {τ : L →+* F}
    {γ : K →+* F} [RingHomCompTriple σ τ γ] (f : V →ₛₗ[σ] W) (hf : Function.Injective f)
    (g : W →ₛₗ[τ] U) (hg : Function.Injective g) :
    map (g.comp f) (hg.comp hf) = map g hg ∘ map f hf 
goal: Projectivization.map (g.comp f) ⋯ = Projectivization.map g hg ∘ Projectivization.map f hf