Loogle!
Result
Found 22 declarations mentioning Submodule.liftQ.
- Submodule.liftQ 📋 Mathlib.LinearAlgebra.Quotient.Basic
{R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) {R₂ : Type u_3} {M₂ : Type u_4} [Ring R₂] [AddCommGroup M₂] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (f : M →ₛₗ[τ₁₂] M₂) (h : p ≤ f.ker) : M ⧸ p →ₛₗ[τ₁₂] M₂ - Submodule.range_liftQ 📋 Mathlib.LinearAlgebra.Quotient.Basic
{R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) {R₂ : Type u_3} {M₂ : Type u_4} [Ring R₂] [AddCommGroup M₂] [Module R₂ M₂] {τ₁₂ : R →+* R₂} [RingHomSurjective τ₁₂] (f : M →ₛₗ[τ₁₂] M₂) (h : p ≤ f.ker) : (p.liftQ f h).range = f.range - Submodule.liftQ_mkQ 📋 Mathlib.LinearAlgebra.Quotient.Basic
{R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) {R₂ : Type u_3} {M₂ : Type u_4} [Ring R₂] [AddCommGroup M₂] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (f : M →ₛₗ[τ₁₂] M₂) (h : p ≤ f.ker) : p.liftQ f h ∘ₛₗ p.mkQ = f - Submodule.liftQ_apply 📋 Mathlib.LinearAlgebra.Quotient.Basic
{R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) {R₂ : Type u_3} {M₂ : Type u_4} [Ring R₂] [AddCommGroup M₂] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (f : M →ₛₗ[τ₁₂] M₂) {h : p ≤ f.ker} (x : M) : (p.liftQ f h) (Submodule.Quotient.mk x) = f x - Submodule.ker_liftQ 📋 Mathlib.LinearAlgebra.Quotient.Basic
{R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) {R₂ : Type u_3} {M₂ : Type u_4} [Ring R₂] [AddCommGroup M₂] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (f : M →ₛₗ[τ₁₂] M₂) (h : p ≤ f.ker) : (p.liftQ f h).ker = Submodule.map p.mkQ f.ker - Submodule.comap_liftQ 📋 Mathlib.LinearAlgebra.Quotient.Basic
{R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) {R₂ : Type u_3} {M₂ : Type u_4} [Ring R₂] [AddCommGroup M₂] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (q : Submodule R₂ M₂) (f : M →ₛₗ[τ₁₂] M₂) (h : p ≤ f.ker) : Submodule.comap (p.liftQ f h) q = Submodule.map p.mkQ (Submodule.comap f q) - Submodule.map_liftQ 📋 Mathlib.LinearAlgebra.Quotient.Basic
{R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) {R₂ : Type u_3} {M₂ : Type u_4} [Ring R₂] [AddCommGroup M₂] [Module R₂ M₂] {τ₁₂ : R →+* R₂} [RingHomSurjective τ₁₂] (f : M →ₛₗ[τ₁₂] M₂) (h : p ≤ f.ker) (q : Submodule R (M ⧸ p)) : Submodule.map (p.liftQ f h) q = Submodule.map f (Submodule.comap p.mkQ q) - Submodule.liftQ.congr_simp 📋 Mathlib.LinearAlgebra.Quotient.Basic
{R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) {R₂ : Type u_3} {M₂ : Type u_4} [Ring R₂] [AddCommGroup M₂] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (f f✝ : M →ₛₗ[τ₁₂] M₂) (e_f : f = f✝) (h : p ≤ f.ker) : p.liftQ f h = p.liftQ f✝ ⋯ - Submodule.ker_liftQ_eq_bot' 📋 Mathlib.LinearAlgebra.Quotient.Basic
{R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) {R₂ : Type u_3} {M₂ : Type u_4} [Ring R₂] [AddCommGroup M₂] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (f : M →ₛₗ[τ₁₂] M₂) (h : p = f.ker) : (p.liftQ f ⋯).ker = ⊥ - Submodule.ker_liftQ_eq_bot 📋 Mathlib.LinearAlgebra.Quotient.Basic
{R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) {R₂ : Type u_3} {M₂ : Type u_4} [Ring R₂] [AddCommGroup M₂] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (f : M →ₛₗ[τ₁₂] M₂) (h : p ≤ f.ker) (h' : f.ker ≤ p) : (p.liftQ f h).ker = ⊥ - Submodule.pi_liftQ_eq_liftQ_pi 📋 Mathlib.LinearAlgebra.Quotient.Basic
{R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {ι : Type u_5} {N : ι → Type u_6} [(i : ι) → AddCommGroup (N i)] [(i : ι) → Module R (N i)] (f : (i : ι) → M →ₗ[R] N i) {p : Submodule R M} (h : ∀ (i : ι), p ≤ (f i).ker) : (LinearMap.pi fun i => p.liftQ (f i) ⋯) = p.liftQ (LinearMap.pi f) ⋯ - LinearMap.quotientInfToSupQuotient.eq_1 📋 Mathlib.LinearAlgebra.Isomorphisms
{R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p p' : Submodule R M) : LinearMap.quotientInfToSupQuotient p p' = (Submodule.comap p.subtype (p ⊓ p')).liftQ (LinearMap.subToSupQuotient p p') ⋯ - LinearMap.surjective_range_liftQ 📋 Mathlib.Algebra.Exact
{R : Type u_1} {M : Type u_2} {N : Type u_4} {P : Type u_6} [Ring R] [AddCommGroup M] [AddCommGroup N] [AddCommGroup P] [Module R M] [Module R N] [Module R P] {f : M →ₗ[R] N} {g : N →ₗ[R] P} (h : f.range ≤ g.ker) (hg : Function.Surjective ⇑g) : Function.Surjective ⇑(f.range.liftQ g h) - LinearMap.injective_range_liftQ_of_exact 📋 Mathlib.Algebra.Exact
{R : Type u_1} {M : Type u_2} {N : Type u_4} {P : Type u_6} [Ring R] [AddCommGroup M] [AddCommGroup N] [AddCommGroup P] [Module R M] [Module R N] [Module R P] {f : M →ₗ[R] N} {g : N →ₗ[R] P} (h : Function.Exact ⇑f ⇑g) : Function.Injective ⇑(f.range.liftQ g ⋯) - LinearMap.ker_eq_bot_range_liftQ_iff 📋 Mathlib.Algebra.Exact
{R : Type u_1} {M : Type u_2} {N : Type u_4} {P : Type u_6} [Ring R] [AddCommGroup M] [AddCommGroup N] [AddCommGroup P] [Module R M] [Module R N] [Module R P] {f : M →ₗ[R] N} {g : N →ₗ[R] P} (h : f.range ≤ g.ker) : (f.range.liftQ g h).ker = ⊥ ↔ g.ker = f.range - Function.Exact.linearEquivOfSurjective_apply 📋 Mathlib.Algebra.Exact
{R : Type u_1} {M : Type u_2} {N : Type u_4} {P : Type u_6} [Ring R] [AddCommGroup M] [AddCommGroup N] [AddCommGroup P] [Module R M] [Module R N] [Module R P] {f : M →ₗ[R] N} {g : N →ₗ[R] P} (h : Function.Exact ⇑f ⇑g) (hg : Function.Surjective ⇑g) (a✝ : N ⧸ f.range) : (h.linearEquivOfSurjective hg) a✝ = (f.range.liftQ g ⋯) a✝ - lTensor.toFun.eq_1 📋 Mathlib.LinearAlgebra.TensorProduct.RightExactness
{R : Type u_1} {M : Type u_2} {N : Type u_3} {P : Type u_4} [CommRing R] [AddCommGroup M] [AddCommGroup N] [AddCommGroup P] [Module R M] [Module R N] [Module R P] {f : M →ₗ[R] N} {g : N →ₗ[R] P} (Q : Type u_5) [AddCommGroup Q] [Module R Q] (hfg : Function.Exact ⇑f ⇑g) : lTensor.toFun Q hfg = (LinearMap.lTensor Q f).range.liftQ (LinearMap.lTensor Q g) ⋯ - rTensor.toFun.eq_1 📋 Mathlib.LinearAlgebra.TensorProduct.RightExactness
{R : Type u_1} {M : Type u_2} {N : Type u_3} {P : Type u_4} [CommRing R] [AddCommGroup M] [AddCommGroup N] [AddCommGroup P] [Module R M] [Module R N] [Module R P] {f : M →ₗ[R] N} {g : N →ₗ[R] P} (Q : Type u_5) [AddCommGroup Q] [Module R Q] (hfg : Function.Exact ⇑f ⇑g) : rTensor.toFun Q hfg = (LinearMap.rTensor Q f).range.liftQ (LinearMap.rTensor Q g) ⋯ - CategoryTheory.ShortComplex.moduleCatLeftHomologyData_descH_hom 📋 Mathlib.Algebra.Homology.ShortComplex.ModuleCat
{R : Type u} [Ring R] (S : CategoryTheory.ShortComplex (ModuleCat R)) {M : ModuleCat R} (φ : S.moduleCatLeftHomologyData.K ⟶ M) (h : CategoryTheory.CategoryStruct.comp S.moduleCatLeftHomologyData.f' φ = 0) : ModuleCat.Hom.hom (S.moduleCatLeftHomologyData.descH φ h) = (ModuleCat.Hom.hom S.moduleCatLeftHomologyData.f').range.liftQ (ModuleCat.Hom.hom φ) ⋯ - LinearMap.compLeftInverse.eq_1 📋 Mathlib.Analysis.Normed.Operator.Extend
{𝕜 : Type u_1} {𝕜₂ : Type u_2} {E : Type u_3} {Eₗ : Type u_4} {F : Type u_5} [DivisionRing 𝕜] [DivisionRing 𝕜₂] {σ₁₂ : 𝕜 →+* 𝕜₂} [AddCommGroup E] [NormedAddCommGroup F] [SeminormedAddCommGroup Eₗ] [Module 𝕜 E] [Module 𝕜₂ F] [Module 𝕜 Eₗ] (f : E →ₛₗ[σ₁₂] F) (g : E →ₗ[𝕜] Eₗ) : f.compLeftInverse g = if h : ∃ C, ∀ (x : E), ‖f x‖ ≤ C * ‖g x‖ then (g.ker.liftQ f ⋯ ∘ₛₗ ↑g.quotKerEquivRange.symm).mkContinuousOfExistsBound ⋯ else 0 - ModN.basis.eq_1 📋 Mathlib.LinearAlgebra.FreeModule.ModN
{G : Type u_1} [AddCommGroup G] {n : ℕ} [NeZero n] {ι : Type u_4} (b : Module.Basis ι ℤ G) : ModN.basis b = { repr := LinearEquiv.ofBijective (AddMonoidHom.toZModLinearMap n (((LinearMap.lsmul ℤ G) ↑n).range.liftQ (Finsupp.mapRange.linearMap (Int.castAddHom (ZMod n)).toIntLinearMap ∘ₗ ↑b.repr) ⋯).toAddMonoidHom) ⋯ } - Submodule.mapQ.eq_1 📋 Mathlib.RingTheory.DedekindDomain.Factorization
{R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) {R₂ : Type u_3} {M₂ : Type u_4} [Ring R₂] [AddCommGroup M₂] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (q : Submodule R₂ M₂) (f : M →ₛₗ[τ₁₂] M₂) (h : p ≤ Submodule.comap f q) : p.mapQ q f h = p.liftQ (q.mkQ ∘ₛₗ f) ⋯
About
Loogle searches Lean and Mathlib definitions and theorems.
You can use Loogle from within the Lean4 VSCode language extension
using (by default) Ctrl-K Ctrl-S. You can also try the
#loogle command from LeanSearchClient,
the CLI version, the Loogle
VS Code extension, the lean.nvim
integration or the Zulip bot.
Usage
Loogle finds definitions and lemmas in various ways:
By constant:
🔍Real.sin
finds all lemmas whose statement somehow mentions the sine function.By lemma name substring:
🔍"differ"
finds all lemmas that have"differ"somewhere in their lemma name.By subexpression:
🔍_ * (_ ^ _)
finds all lemmas whose statements somewhere include a product where the second argument is raised to some power.The pattern can also be non-linear, as in
🔍Real.sqrt ?a * Real.sqrt ?aIf the pattern has parameters, they are matched in any order. Both of these will find
List.map:
🔍(?a -> ?b) -> List ?a -> List ?b
🔍List ?a -> (?a -> ?b) -> List ?bBy main conclusion:
🔍|- tsum _ = _ * tsum _
finds all lemmas where the conclusion (the subexpression to the right of all→and∀) has the given shape.As before, if the pattern has parameters, they are matched against the hypotheses of the lemma in any order; for example,
🔍|- _ < _ → tsum _ < tsum _
will findtsum_lt_tsumeven though the hypothesisf i < g iis not the last.
If you pass more than one such search filter, separated by commas
Loogle will return lemmas which match all of them. The
search
🔍 Real.sin, "two", tsum, _ * _, _ ^ _, |- _ < _ → _
would find all lemmas which mention the constants Real.sin
and tsum, have "two" as a substring of the
lemma name, include a product and a power somewhere in the type,
and have a hypothesis of the form _ < _ (if
there were any such lemmas). Metavariables (?a) are
assigned independently in each filter.
The #lucky button will directly send you to the
documentation of the first hit.
Source code
You can find the source code for this service at https://github.com/nomeata/loogle. The https://loogle.lean-lang.org/ service is provided by the Lean FRO.
This is Loogle revision 6ff4759 serving mathlib revision 7379a9f