ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
-- Module.Projective.of_lifting_property
theorem Projective.of_lifting_property {R : Type u} [Ring R] {P : Type max u v} [AddCommGroup P]
    [Module R P]
    -- If for all surjections of `R`-modules `M →ₗ N`, all maps `P →ₗ N` lift to `P →ₗ M`,
    (huniv : ∀ {M : Type max v u} {N : Type max u v} [AddCommGroup M] [AddCommGroup N]
      [Module R M] [Module R N] (f : M →ₗ[R] N) (g : P →ₗ[R] N),
        Function.Surjective f → ∃ h : P →ₗ[R] M, f.comp h = g) :
    -- then `P` is projective.
    Projective R P 
Arguments: {R : Type u} [Ring R] {P : Type (max u v)} [AddCommGroup P] [Module R P] (huniv :
  ∀ {M : Type (max v u)} {N : Type (max u v)} [inst : AddCommGroup M] [inst_1 : AddCommGroup N] [inst_2 : Module R M]
    [inst_3 : Module R N] (f : M →ₗ[R] N) (g : P →ₗ[R] N), Function.Surjective ⇑f → ∃ h, f ∘ₗ h = g)
Goal: Module.Projective R P
-- LinearMap.iterateMapComap_le_succ
theorem iterateMapComap_le_succ (K : Submodule R N) (h : K.map f ≤ K.map i) (n : ℕ) :
    f.iterateMapComap i n K ≤ f.iterateMapComap i (n + 1) K 
Arguments: {R : Type u_1} {N : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid N] [Module R N] [AddCommMonoid M] [Module R M] (f i : N →ₗ[R] M) (K : Submodule R N) (h : Submodule.map f K ≤ Submodule.map i K) (n : ℕ)
Goal: f.iterateMapComap i n K ≤ f.iterateMapComap i (n + 1) K
-- LinearMap.iterateMapComap_eq_succ
theorem iterateMapComap_eq_succ (K : Submodule R N)
    (m : ℕ) (heq : f.iterateMapComap i m K = f.iterateMapComap i (m + 1) K)
    (hf : Surjective f) (hi : Injective i) (n : ℕ) :
    f.iterateMapComap i n K = f.iterateMapComap i (n + 1) K 
Arguments: {R : Type u_1} {N : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid N] [Module R N] [AddCommMonoid M] [Module R M] (f i : N →ₗ[R] M) (K : Submodule R N) (m : ℕ) (heq : f.iterateMapComap i m K = f.iterateMapComap i (m + 1) K) (hf : Function.Surjective ⇑f) (hi : Function.Injective ⇑i) (n : ℕ)
Goal: f.iterateMapComap i n K = f.iterateMapComap i (n + 1) K
-- LinearMap.ker_le_of_iterateMapComap_eq_succ
theorem ker_le_of_iterateMapComap_eq_succ (K : Submodule R N)
    (m : ℕ) (heq : f.iterateMapComap i m K = f.iterateMapComap i (m + 1) K)
    (hf : Surjective f) (hi : Injective i) : LinearMap.ker f ≤ K 
Arguments: {R : Type u_1} {N : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid N] [Module R N] [AddCommMonoid M] [Module R M] (f i : N →ₗ[R] M) (K : Submodule R N) (m : ℕ) (heq : f.iterateMapComap i m K = f.iterateMapComap i (m + 1) K) (hf : Function.Surjective ⇑f) (hi : Function.Injective ⇑i)
Goal: LinearMap.ker f ≤ K
-- Function.Exact.apply_apply_eq_zero
lemma apply_apply_eq_zero [Zero P] (h : Exact f g) (x : M) :
    g (f x) = 0 
Arguments: {M : Type u_2} {N : Type u_4} {P : Type u_6} {f : M → N} {g : N → P} [Zero P] (h : Function.Exact f g) (x : M)
Goal: g (f x) = 0
-- Function.Exact.comp_eq_zero
lemma comp_eq_zero [Zero P] (h : Exact f g) : g.comp f = 0 
Arguments: {M : Type u_2} {N : Type u_4} {P : Type u_6} {f : M → N} {g : N → P} [Zero P] (h : Function.Exact f g)
Goal: g ∘ f = 0
-- Function.Exact.of_comp_of_mem_range
lemma of_comp_of_mem_range [Zero P] (h1 : g ∘ f = 0)
    (h2 : ∀ x, g x = 0 → x ∈ Set.range f) : Exact f g 
Arguments: {M : Type u_2} {N : Type u_4} {P : Type u_6} {f : M → N} {g : N → P} [Zero P] (h1 : g ∘ f = 0) (h2 : ∀ (x : N), g x = 0 → x ∈ Set.range f)
Goal: Function.Exact f g
-- Function.Exact.comp_injective
lemma comp_injective [Zero P] [Zero P'] (exact : Exact f g)
    (inj : Function.Injective g') (h0 : g' 0 = 0) :
    Exact f (g' ∘ g) 
Arguments: {M : Type u_2} {N : Type u_4} {P : Type u_6} {P' : Type u_7} {f : M → N} {g : N → P} (g' : P → P') [Zero P] [Zero P'] (exact : Function.Exact f g) (inj : Function.Injective g') (h0 : g' 0 = 0)
Goal: Function.Exact f (g' ∘ g)
-- Function.Exact.of_comp_eq_zero_of_ker_in_range
lemma of_comp_eq_zero_of_ker_in_range [Zero P] (hc : g.comp f = 0)
    (hr : ∀ y, g y = 0 → y ∈ Set.range f) :
    Exact f g 
Arguments: {M : Type u_2} {N : Type u_4} {P : Type u_6} {f : M → N} {g : N → P} [Zero P] (hc : g ∘ f = 0) (hr : ∀ (y : N), g y = 0 → y ∈ Set.range f)
Goal: Function.Exact f g
-- AddMonoidHom.exact_iff
lemma exact_iff :
    Exact f g ↔ ker g = range f 
Arguments: {M : Type u_2} {N : Type u_4} {P : Type u_6} [AddGroup M] [AddGroup N] [AddGroup P] {f : M →+ N} {g : N →+ P}
Goal: Function.Exact ⇑f ⇑g ↔ g.ker = f.range
-- AddMonoidHom.exact_of_comp_eq_zero_of_ker_le_range
lemma exact_of_comp_eq_zero_of_ker_le_range
    (h1 : g.comp f = 0) (h2 : ker g ≤ range f) : Exact f g 
Arguments: {M : Type u_2} {N : Type u_4} {P : Type u_6} [AddGroup M] [AddGroup N] [AddGroup P] {f : M →+ N} {g : N →+ P} (h1 : g.comp f = 0) (h2 : g.ker ≤ f.range)
Goal: Function.Exact ⇑f ⇑g
-- AddMonoidHom.exact_of_comp_of_mem_range
lemma exact_of_comp_of_mem_range
    (h1 : g.comp f = 0) (h2 : ∀ x, g x = 0 → x ∈ range f) : Exact f g 
Arguments: {M : Type u_2} {N : Type u_4} {P : Type u_6} [AddGroup M] [AddGroup N] [AddGroup P] {f : M →+ N} {g : N →+ P} (h1 : g.comp f = 0) (h2 : ∀ (x : N), g x = 0 → x ∈ f.range)
Goal: Function.Exact ⇑f ⇑g
-- Function.Exact.addMonoidHom_ker_eq
lemma addMonoidHom_ker_eq (hfg : Exact f g) :
    ker g = range f 
Arguments: {M : Type u_2} {N : Type u_4} {P : Type u_6} [AddGroup M] [AddGroup N] [AddGroup P] {f : M →+ N} {g : N →+ P} (hfg : Function.Exact ⇑f ⇑g)
Goal: g.ker = f.range
-- Function.Exact.addMonoidHom_comp_eq_zero
lemma addMonoidHom_comp_eq_zero (h : Exact f g) : g.comp f = 0 
Arguments: {M : Type u_2} {N : Type u_4} {P : Type u_6} [AddGroup M] [AddGroup N] [AddGroup P] {f : M →+ N} {g : N →+ P} (h : Function.Exact ⇑f ⇑g)
Goal: g.comp f = 0
-- Function.Exact.of_ladder_addEquiv_of_exact
lemma of_ladder_addEquiv_of_exact (comm₁₂ : g₁₂.comp e₁ = AddMonoidHom.comp e₂ f₁₂)
    (comm₂₃ : g₂₃.comp e₂ = AddMonoidHom.comp e₃ f₂₃) (H : Exact f₁₂ f₂₃) : Exact g₁₂ g₂₃ 
Arguments: {X₁ : Type u_8} {X₂ : Type u_9} {X₃ : Type u_10} {Y₁ : Type u_11} {Y₂ : Type u_12} {Y₃ : Type u_13} [AddCommMonoid X₁] [AddCommMonoid X₂] [AddCommMonoid X₃] [AddCommMonoid Y₁] [AddCommMonoid Y₂] [AddCommMonoid Y₃] (e₁ : X₁ ≃+ Y₁) (e₂ : X₂ ≃+ Y₂) (e₃ : X₃ ≃+ Y₃) {f₁₂ : X₁ →+ X₂} {f₂₃ : X₂ →+ X₃} {g₁₂ : Y₁ →+ Y₂} {g₂₃ : Y₂ →+ Y₃} (comm₁₂ : g₁₂.comp ↑e₁ = (↑e₂).comp f₁₂) (comm₂₃ : g₂₃.comp ↑e₂ = (↑e₃).comp f₂₃) (H : Function.Exact ⇑f₁₂ ⇑f₂₃)
Goal: Function.Exact ⇑g₁₂ ⇑g₂₃
-- Function.Exact.of_ladder_addEquiv_of_exact'
lemma of_ladder_addEquiv_of_exact' (comm₁₂ : g₁₂.comp e₁ = AddMonoidHom.comp e₂ f₁₂)
    (comm₂₃ : g₂₃.comp e₂ = AddMonoidHom.comp e₃ f₂₃) (H : Exact g₁₂ g₂₃) : Exact f₁₂ f₂₃ 
Arguments: {X₁ : Type u_8} {X₂ : Type u_9} {X₃ : Type u_10} {Y₁ : Type u_11} {Y₂ : Type u_12} {Y₃ : Type u_13} [AddCommMonoid X₁] [AddCommMonoid X₂] [AddCommMonoid X₃] [AddCommMonoid Y₁] [AddCommMonoid Y₂] [AddCommMonoid Y₃] (e₁ : X₁ ≃+ Y₁) (e₂ : X₂ ≃+ Y₂) (e₃ : X₃ ≃+ Y₃) {f₁₂ : X₁ →+ X₂} {f₂₃ : X₂ →+ X₃} {g₁₂ : Y₁ →+ Y₂} {g₂₃ : Y₂ →+ Y₃} (comm₁₂ : g₁₂.comp ↑e₁ = (↑e₂).comp f₁₂) (comm₂₃ : g₂₃.comp ↑e₂ = (↑e₃).comp f₂₃) (H : Function.Exact ⇑g₁₂ ⇑g₂₃)
Goal: Function.Exact ⇑f₁₂ ⇑f₂₃
-- Function.Exact.iff_of_ladder_addEquiv
lemma iff_of_ladder_addEquiv (comm₁₂ : g₁₂.comp e₁ = AddMonoidHom.comp e₂ f₁₂)
    (comm₂₃ : g₂₃.comp e₂ = AddMonoidHom.comp e₃ f₂₃) : Exact g₁₂ g₂₃ ↔ Exact f₁₂ f₂₃ 
Arguments: {X₁ : Type u_8} {X₂ : Type u_9} {X₃ : Type u_10} {Y₁ : Type u_11} {Y₂ : Type u_12} {Y₃ : Type u_13} [AddCommMonoid X₁] [AddCommMonoid X₂] [AddCommMonoid X₃] [AddCommMonoid Y₁] [AddCommMonoid Y₂] [AddCommMonoid Y₃] (e₁ : X₁ ≃+ Y₁) (e₂ : X₂ ≃+ Y₂) (e₃ : X₃ ≃+ Y₃) {f₁₂ : X₁ →+ X₂} {f₂₃ : X₂ →+ X₃} {g₁₂ : Y₁ →+ Y₂} {g₂₃ : Y₂ →+ Y₃} (comm₁₂ : g₁₂.comp ↑e₁ = (↑e₂).comp f₁₂) (comm₂₃ : g₂₃.comp ↑e₂ = (↑e₃).comp f₂₃)
Goal: Function.Exact ⇑g₁₂ ⇑g₂₃ ↔ Function.Exact ⇑f₁₂ ⇑f₂₃
-- LinearMap.exact_iff
lemma exact_iff :
    Exact f g ↔ LinearMap.ker g = LinearMap.range f 
Arguments: {R : Type u_1} {M : Type u_2} {N : Type u_4} {P : Type u_6} [Semiring R] [AddCommMonoid M] [AddCommMonoid N] [AddCommMonoid P] [Module R M] [Module R N] [Module R P] {f : M →ₗ[R] N} {g : N →ₗ[R] P}
Goal: Function.Exact ⇑f ⇑g ↔ LinearMap.ker g = LinearMap.range f
-- LinearMap.exact_of_comp_eq_zero_of_ker_le_range
lemma exact_of_comp_eq_zero_of_ker_le_range
    (h1 : g ∘ₗ f = 0) (h2 : ker g ≤ range f) : Exact f g 
Arguments: {R : Type u_1} {M : Type u_2} {N : Type u_4} {P : Type u_6} [Semiring R] [AddCommMonoid M] [AddCommMonoid N] [AddCommMonoid P] [Module R M] [Module R N] [Module R P] {f : M →ₗ[R] N} {g : N →ₗ[R] P} (h1 : g ∘ₗ f = 0) (h2 : LinearMap.ker g ≤ LinearMap.range f)
Goal: Function.Exact ⇑f ⇑g
-- LinearMap.exact_of_comp_of_mem_range
lemma exact_of_comp_of_mem_range
    (h1 : g ∘ₗ f = 0) (h2 : ∀ x, g x = 0 → x ∈ range f) : Exact f g 
Arguments: {R : Type u_1} {M : Type u_2} {N : Type u_4} {P : Type u_6} [Semiring R] [AddCommMonoid M] [AddCommMonoid N] [AddCommMonoid P] [Module R M] [Module R N] [Module R P] {f : M →ₗ[R] N} {g : N →ₗ[R] P} (h1 : g ∘ₗ f = 0) (h2 : ∀ (x : N), g x = 0 → x ∈ LinearMap.range f)
Goal: Function.Exact ⇑f ⇑g
-- LinearMap.exact_subtype_mkQ
lemma exact_subtype_mkQ (Q : Submodule R N) :
    Exact (Submodule.subtype Q) (Submodule.mkQ Q) 
Arguments: {R : Type u_8} {N : Type u_10} [CommRing R] [AddCommGroup N] [Module R N] (Q : Submodule R N)
Goal: Function.Exact ⇑Q.subtype ⇑Q.mkQ
-- LinearMap.exact_map_mkQ_range
lemma exact_map_mkQ_range (f : M →ₗ[R] N) :
    Exact f (Submodule.mkQ (range f)) 
Arguments: {R : Type u_8} {M : Type u_9} {N : Type u_10} [CommRing R] [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] (f : M →ₗ[R] N)
Goal: Function.Exact ⇑f ⇑(LinearMap.range f).mkQ
-- LinearMap.exact_subtype_ker_map
lemma exact_subtype_ker_map (g : N →ₗ[R] P) :
    Exact (Submodule.subtype (ker g)) g 
Arguments: {R : Type u_8} {N : Type u_10} {P : Type u_11} [CommRing R] [AddCommGroup N] [AddCommGroup P] [Module R N] [Module R P] (g : N →ₗ[R] P)
Goal: Function.Exact ⇑(LinearMap.ker g).subtype ⇑g
-- LinearEquiv.conj_exact_iff_exact
lemma LinearEquiv.conj_exact_iff_exact (e : N ≃ₗ[R] N') :
    Function.Exact (e ∘ₗ f) (g ∘ₗ (e.symm : N' →ₗ[R] N)) ↔ Exact f g 
Arguments: {R : Type u_1} {M : Type u_2} {N : Type u_4} {N' : Type u_5} {P : Type u_6} [Semiring R] [AddCommMonoid M] [AddCommMonoid N] [AddCommMonoid N'] [AddCommMonoid P] [Module R M] [Module R N] [Module R N'] [Module R P] (f : M →ₗ[R] N) (g : N →ₗ[R] P) (e : N ≃ₗ[R] N')
Goal: Function.Exact ⇑(↑e ∘ₗ f) ⇑(g ∘ₗ ↑e.symm) ↔ Function.Exact ⇑f ⇑g
-- Function.Exact.linearMap_ker_eq
lemma Exact.linearMap_ker_eq (hfg : Exact f g) : ker g = range f 
Arguments: {R : Type u_1} {M : Type u_2} {N : Type u_4} {P : Type u_6} [Semiring R] [AddCommMonoid M] [AddCommMonoid N] [AddCommMonoid P] [Module R M] [Module R N] [Module R P] {f : M →ₗ[R] N} {g : N →ₗ[R] P} (hfg : Function.Exact ⇑f ⇑g)
Goal: LinearMap.ker g = LinearMap.range f
-- Function.Exact.linearMap_comp_eq_zero
lemma Exact.linearMap_comp_eq_zero (h : Exact f g) : g.comp f = 0 
Arguments: {R : Type u_1} {M : Type u_2} {N : Type u_4} {P : Type u_6} [Semiring R] [AddCommMonoid M] [AddCommMonoid N] [AddCommMonoid P] [Module R M] [Module R N] [Module R P] {f : M →ₗ[R] N} {g : N →ₗ[R] P} (h : Function.Exact ⇑f ⇑g)
Goal: g ∘ₗ f = 0
-- Function.Surjective.comp_exact_iff_exact
lemma Surjective.comp_exact_iff_exact {p : M' →ₗ[R] M} (h : Surjective p) :
    Exact (f ∘ₗ p) g ↔ Exact f g 
Arguments: {R : Type u_1} {M : Type u_2} {M' : Type u_3} {N : Type u_4} {P : Type u_6} [Semiring R] [AddCommMonoid M] [AddCommMonoid M'] [AddCommMonoid N] [AddCommMonoid P] [Module R M] [Module R M'] [Module R N] [Module R P] {f : M →ₗ[R] N} {g : N →ₗ[R] P} {p : M' →ₗ[R] M} (h : Function.Surjective ⇑p)
Goal: Function.Exact ⇑(f ∘ₗ p) ⇑g ↔ Function.Exact ⇑f ⇑g
-- Function.Injective.comp_exact_iff_exact
lemma Injective.comp_exact_iff_exact {i : P →ₗ[R] P'} (h : Injective i) :
    Exact f (i ∘ₗ g) ↔ Exact f g 
Arguments: {R : Type u_1} {M : Type u_2} {N : Type u_4} {P : Type u_6} {P' : Type u_7} [Semiring R] [AddCommMonoid M] [AddCommMonoid N] [AddCommMonoid P] [AddCommMonoid P'] [Module R M] [Module R N] [Module R P] [Module R P'] {f : M →ₗ[R] N} {g : N →ₗ[R] P} {i : P →ₗ[R] P'} (h : Function.Injective ⇑i)
Goal: Function.Exact ⇑f ⇑(i ∘ₗ g) ↔ Function.Exact ⇑f ⇑g
-- Function.Exact.iff_of_ladder_linearEquiv
lemma Exact.iff_of_ladder_linearEquiv
    (h₁₂ : g₁₂ ∘ₗ e₁ = e₂ ∘ₗ f₁₂) (h₂₃ : g₂₃ ∘ₗ e₂ = e₃ ∘ₗ f₂₃) :
    Exact g₁₂ g₂₃ ↔ Exact f₁₂ f₂₃ 
Arguments: {R : Type u_1} {M : Type u_2} {M' : Type u_3} {N : Type u_4} {N' : Type u_5} {P : Type u_6} {P' : Type u_7} [Semiring R] [AddCommMonoid M] [AddCommMonoid M'] [AddCommMonoid N] [AddCommMonoid N'] [AddCommMonoid P] [AddCommMonoid P'] [Module R M] [Module R M'] [Module R N] [Module R N'] [Module R P] [Module R P'] {f₁₂ : M →ₗ[R] N} {f₂₃ : N →ₗ[R] P} {g₁₂ : M' →ₗ[R] N'} {g₂₃ : N' →ₗ[R] P'} {e₁ : M ≃ₗ[R] M'} {e₂ : N ≃ₗ[R] N'} {e₃ : P ≃ₗ[R] P'} (h₁₂ : g₁₂ ∘ₗ ↑e₁ = ↑e₂ ∘ₗ f₁₂) (h₂₃ : g₂₃ ∘ₗ ↑e₂ = ↑e₃ ∘ₗ f₂₃)
Goal: Function.Exact ⇑g₁₂ ⇑g₂₃ ↔ Function.Exact ⇑f₁₂ ⇑f₂₃
-- Function.Exact.of_ladder_linearEquiv_of_exact
lemma Exact.of_ladder_linearEquiv_of_exact
    (h₁₂ : g₁₂ ∘ₗ e₁ = e₂ ∘ₗ f₁₂) (h₂₃ : g₂₃ ∘ₗ e₂ = e₃ ∘ₗ f₂₃)
    (H : Exact f₁₂ f₂₃) : Exact g₁₂ g₂₃ 
Arguments: {R : Type u_1} {M : Type u_2} {M' : Type u_3} {N : Type u_4} {N' : Type u_5} {P : Type u_6} {P' : Type u_7} [Semiring R] [AddCommMonoid M] [AddCommMonoid M'] [AddCommMonoid N] [AddCommMonoid N'] [AddCommMonoid P] [AddCommMonoid P'] [Module R M] [Module R M'] [Module R N] [Module R N'] [Module R P] [Module R P'] {f₁₂ : M →ₗ[R] N} {f₂₃ : N →ₗ[R] P} {g₁₂ : M' →ₗ[R] N'} {g₂₃ : N' →ₗ[R] P'} {e₁ : M ≃ₗ[R] M'} {e₂ : N ≃ₗ[R] N'} {e₃ : P ≃ₗ[R] P'} (h₁₂ : g₁₂ ∘ₗ ↑e₁ = ↑e₂ ∘ₗ f₁₂) (h₂₃ : g₂₃ ∘ₗ ↑e₂ = ↑e₃ ∘ₗ f₂₃) (H : Function.Exact ⇑f₁₂ ⇑f₂₃)
Goal: Function.Exact ⇑g₁₂ ⇑g₂₃
-- Function.Exact.split_tfae'
theorem Exact.split_tfae' (h : Function.Exact f g) :
    List.TFAE [
      Function.Injective f ∧ ∃ l, g ∘ₗ l = LinearMap.id,
      Function.Surjective g ∧ ∃ l, l ∘ₗ f = LinearMap.id,
      ∃ e : N ≃ₗ[R] M × P, f = e.symm ∘ₗ LinearMap.inl R M P ∧ g = LinearMap.snd R M P ∘ₗ e] 
Arguments: {R : Type u_1} {M : Type u_2} {N : Type u_4} {P : Type u_6} [Semiring 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)
Goal: [Function.Injective ⇑f ∧ ∃ l, g ∘ₗ l = LinearMap.id, Function.Surjective ⇑g ∧ ∃ l, l ∘ₗ f = LinearMap.id,
    ∃ e, f = ↑e.symm ∘ₗ LinearMap.inl R M P ∧ g = LinearMap.snd R M P ∘ₗ ↑e].TFAE
-- Function.Exact.split_tfae
theorem Exact.split_tfae
    {R M N P} [Semiring 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) (hf : Function.Injective f) (hg : Function.Surjective g) :
    List.TFAE [
      ∃ l, g ∘ₗ l = LinearMap.id,
      ∃ l, l ∘ₗ f = LinearMap.id,
      ∃ e : N ≃ₗ[R] M × P, f = e.symm ∘ₗ LinearMap.inl R M P ∧ g = LinearMap.snd R M P ∘ₗ e] 
Arguments: {R : Type u_8} {M : Type u_9} {N : Type u_10} {P : Type u_11} [Semiring 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) (hf : Function.Injective ⇑f) (hg : Function.Surjective ⇑g)
Goal: [∃ l, g ∘ₗ l = LinearMap.id, ∃ l, l ∘ₗ f = LinearMap.id,
    ∃ e, f = ↑e.symm ∘ₗ LinearMap.inl R M P ∧ g = LinearMap.snd R M P ∘ₗ ↑e].TFAE
-- Function.Exact.inr_fst
lemma Exact.inr_fst : Function.Exact (LinearMap.inr R M N) (LinearMap.fst R M N) 
Arguments: {R : Type u_1} {M : Type u_2} {N : Type u_4} [Semiring R] [AddCommMonoid M] [AddCommMonoid N] [Module R M] [Module R N]
Goal: Function.Exact ⇑(LinearMap.inr R M N) ⇑(LinearMap.fst R M N)
-- Function.Exact.inl_snd
lemma Exact.inl_snd : Function.Exact (LinearMap.inl R M N) (LinearMap.snd R M N) 
Arguments: {R : Type u_1} {M : Type u_2} {N : Type u_4} [Semiring R] [AddCommMonoid M] [AddCommMonoid N] [Module R M] [Module R N]
Goal: Function.Exact ⇑(LinearMap.inl R M N) ⇑(LinearMap.snd R M N)
-- Function.Exact.exact_mapQ_iff
lemma Exact.exact_mapQ_iff {f : M →ₗ[R] N} {g : N →ₗ[R] P}
    (hfg : Exact f g) {p q r} (hpq : p ≤ comap f q) (hqr : q ≤ comap g r) :
    Exact (mapQ p q f hpq) (mapQ q r g hqr) ↔ range g ⊓ r ≤ map g q 
Arguments: {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} (hfg : Function.Exact ⇑f ⇑g) {p : Submodule R M} {q : Submodule R N} {r : Submodule R P} (hpq : p ≤ Submodule.comap f q) (hqr : q ≤ Submodule.comap g r)
Goal: Function.Exact ⇑(p.mapQ q f hpq) ⇑(q.mapQ r g hqr) ↔ LinearMap.range g ⊓ r ≤ Submodule.map g q
-- Submodule.mem_toAddSubmonoid
@[simp]
theorem mem_toAddSubmonoid (p : Submodule R M) (x : M) : x ∈ p.toAddSubmonoid ↔ x ∈ p 
Arguments: {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] [Module R M] (p : Submodule R M) (x : M)
Goal: x ∈ p.toAddSubmonoid ↔ x ∈ p
-- Submodule.mem_mk
@[simp]
theorem mem_mk {S : AddSubmonoid M} {x : M} (h) : x ∈ (⟨S, h⟩ : Submodule R M) ↔ x ∈ S 
Arguments: {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] [Module R M] {S : AddSubmonoid M} {x : M} (h : ∀ (c : R) {x : M}, x ∈ S.carrier → c • x ∈ S.carrier)
Goal: x ∈ { toAddSubmonoid := S, smul_mem' := h } ↔ x ∈ S
-- Submodule.coe_set_mk
@[simp]
theorem coe_set_mk (S : AddSubmonoid M) (h) : ((⟨S, h⟩ : Submodule R M) : Set M) = S 
Arguments: {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] [Module R M] (S : AddSubmonoid M) (h : ∀ (c : R) {x : M}, x ∈ S.carrier → c • x ∈ S.carrier)
Goal: ↑{ toAddSubmonoid := S, smul_mem' := h } = ↑S
-- Submodule.eta
@[simp] theorem eta (h) : ({p with smul_mem' := h} : Submodule R M) = p 
Arguments: {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] [Module R M] {p : Submodule R M} (h : ∀ (c : R) {x : M}, x ∈ p.carrier → c • x ∈ p.carrier)
Goal: { toAddSubmonoid := p.toAddSubmonoid, smul_mem' := h } = p
-- Submodule.mk_le_mk
@[simp]
theorem mk_le_mk {S S' : AddSubmonoid M} (h h') :
    (⟨S, h⟩ : Submodule R M) ≤ (⟨S', h'⟩ : Submodule R M) ↔ S ≤ S' 
Arguments: {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] [Module R M] {S S' : AddSubmonoid M} (h : ∀ (c : R) {x : M}, x ∈ S.carrier → c • x ∈ S.carrier) (h' : ∀ (c : R) {x : M}, x ∈ S'.carrier → c • x ∈ S'.carrier)
Goal: { toAddSubmonoid := S, smul_mem' := h } ≤ { toAddSubmonoid := S', smul_mem' := h' } ↔ S ≤ S'
-- Submodule.ext
@[ext]
theorem ext (h : ∀ x, x ∈ p ↔ x ∈ q) : p = q 
Arguments: {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] [Module R M] {p q : Submodule R M} (h : ∀ (x : M), x ∈ p ↔ x ∈ q)
Goal: p = q
-- Submodule.carrier_inj
@[simp]
theorem carrier_inj : p.carrier = q.carrier ↔ p = q 
Arguments: {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] [Module R M] {p q : Submodule R M}
Goal: p.carrier = q.carrier ↔ p = q
-- Submodule.coe_copy
@[simp]
theorem coe_copy (S : Submodule R M) (s : Set M) (hs : s = ↑S) : (S.copy s hs : Set M) = s 
Arguments: {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] [Module R M] (S : Submodule R M) (s : Set M) (hs : s = ↑S)
Goal: ↑(S.copy s hs) = s
-- Submodule.copy_eq
theorem copy_eq (S : Submodule R M) (s : Set M) (hs : s = ↑S) : S.copy s hs = S 
Arguments: {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] [Module R M] (S : Submodule R M) (s : Set M) (hs : s = ↑S)
Goal: S.copy s hs = S
-- Submodule.toAddSubmonoid_injective
theorem toAddSubmonoid_injective : Injective (toAddSubmonoid : Submodule R M → AddSubmonoid M) 
Arguments: {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] [Module R M]
Goal: Function.Injective Submodule.toAddSubmonoid
-- Submodule.toAddSubmonoid_eq
@[simp]
theorem toAddSubmonoid_eq : p.toAddSubmonoid = q.toAddSubmonoid ↔ p = q 
Arguments: {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] [Module R M] {p q : Submodule R M}
Goal: p.toAddSubmonoid = q.toAddSubmonoid ↔ p = q
-- Submodule.toAddSubmonoid_strictMono
@[mono]
theorem toAddSubmonoid_strictMono : StrictMono (toAddSubmonoid : Submodule R M → AddSubmonoid M) 
Arguments: {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] [Module R M]
Goal: StrictMono Submodule.toAddSubmonoid
-- Submodule.toAddSubmonoid_le
theorem toAddSubmonoid_le : p.toAddSubmonoid ≤ q.toAddSubmonoid ↔ p ≤ q 
Arguments: {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] [Module R M] {p q : Submodule R M}
Goal: p.toAddSubmonoid ≤ q.toAddSubmonoid ↔ p ≤ q
-- Submodule.toAddSubmonoid_mono
@[mono]
theorem toAddSubmonoid_mono : Monotone (toAddSubmonoid : Submodule R M → AddSubmonoid M) 
Arguments: {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] [Module R M]
Goal: Monotone Submodule.toAddSubmonoid
-- Submodule.coe_toAddSubmonoid
@[simp]
theorem coe_toAddSubmonoid (p : Submodule R M) : (p.toAddSubmonoid : Set M) = p 
Arguments: {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] [Module R M] (p : Submodule R M)
Goal: ↑p.toAddSubmonoid = ↑p
-- Submodule.toSubMulAction_injective
theorem toSubMulAction_injective : Injective (toSubMulAction : Submodule R M → SubMulAction R M) 
Arguments: {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] [Module R M]
Goal: Function.Injective Submodule.toSubMulAction
-- Submodule.toSubMulAction_eq
theorem toSubMulAction_eq : p.toSubMulAction = q.toSubMulAction ↔ p = q 
Arguments: {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] [Module R M] {p q : Submodule R M}
Goal: p.toSubMulAction = q.toSubMulAction ↔ p = q
-- Submodule.toSubMulAction_strictMono
@[mono]
theorem toSubMulAction_strictMono :
    StrictMono (toSubMulAction : Submodule R M → SubMulAction R M) 
Arguments: {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] [Module R M]
Goal: StrictMono Submodule.toSubMulAction
-- Submodule.toSubMulAction_mono
@[mono]
theorem toSubMulAction_mono : Monotone (toSubMulAction : Submodule R M → SubMulAction R M) 
Arguments: {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] [Module R M]
Goal: Monotone Submodule.toSubMulAction
-- Submodule.coe_toSubMulAction
@[simp]
theorem coe_toSubMulAction (p : Submodule R M) : (p.toSubMulAction : Set M) = p 
Arguments: {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] [Module R M] (p : Submodule R M)
Goal: ↑p.toSubMulAction = ↑p
-- Submodule.mem_carrier
theorem mem_carrier : x ∈ p.carrier ↔ x ∈ (p : Set M) 
Arguments: {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] {module_M : Module R M} (p : Submodule R M) {x : M}
Goal: x ∈ p.carrier ↔ x ∈ ↑p
-- Submodule.zero_mem
@[simp]
protected theorem zero_mem : (0 : M) ∈ p 
Arguments: {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] {module_M : Module R M} (p : Submodule R M)
Goal: 0 ∈ p
-- Submodule.add_mem
protected theorem add_mem (h₁ : x ∈ p) (h₂ : y ∈ p) : x + y ∈ p 
Arguments: {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] {module_M : Module R M} (p : Submodule R M) {x y : M} (h₁ : x ∈ p) (h₂ : y ∈ p)
Goal: x + y ∈ p
-- Submodule.smul_mem
theorem smul_mem (r : R) (h : x ∈ p) : r • x ∈ p 
Arguments: {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] {module_M : Module R M} (p : Submodule R M) {x : M} (r : R) (h : x ∈ p)
Goal: r • x ∈ p
-- Submodule.smul_of_tower_mem
theorem smul_of_tower_mem [SMul S R] [SMul S M] [IsScalarTower S R M] (r : S) (h : x ∈ p) :
    r • x ∈ p 
Arguments: {S : Type u'} {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] {module_M : Module R M} (p : Submodule R M) {x : M} [SMul S R] [SMul S M] [IsScalarTower S R M] (r : S) (h : x ∈ p)
Goal: r • x ∈ p
-- Submodule.sum_mem
protected theorem sum_mem {t : Finset ι} {f : ι → M} : (∀ c ∈ t, f c ∈ p) → (∑ i ∈ t, f i) ∈ p 
Arguments: {R : Type u} {M : Type v} {ι : Type w} [Semiring R] [AddCommMonoid M] {module_M : Module R M} (p : Submodule R M) {t : Finset ι} {f : ι → M}
Goal: (∀ c ∈ t, f c ∈ p) → ∑ i ∈ t, f i ∈ p
-- Submodule.sum_smul_mem
theorem sum_smul_mem {t : Finset ι} {f : ι → M} (r : ι → R) (hyp : ∀ c ∈ t, f c ∈ p) :
    (∑ i ∈ t, r i • f i) ∈ p 
Arguments: {R : Type u} {M : Type v} {ι : Type w} [Semiring R] [AddCommMonoid M] {module_M : Module R M} (p : Submodule R M) {t : Finset ι} {f : ι → M} (r : ι → R) (hyp : ∀ c ∈ t, f c ∈ p)
Goal: ∑ i ∈ t, r i • f i ∈ p