tasksource/leandojo huggingface dataset:
Theorem: LieAlgebra.Orthogonal.pb_inv
File: Mathlib/Algebra/Lie/Classical.lean

tactic: rw [PB, Matrix.mul_eq_mul, Matrix.fromBlocks_multiply, Matrix.mul_invOf_self]
state_before: n : Type ?u.145025
p : Type ?u.145028
q : Type ?u.145031
l : Type u_1
R : Type u₂
inst✝⁸ : DecidableEq n
inst✝⁷ : DecidableEq p
inst✝⁶ : DecidableEq q
inst✝⁵ : DecidableEq l
inst✝⁴ : CommRing R
inst✝³ : Fintype p
inst✝² : Fintype q
inst✝¹ : Fintype l
inst✝ : Invertible 2
⊢ PB l R * fromBlocks 1 0 0 ⅟(PD l R) = 1

tactic: simp only [Matrix.mul_zero, Matrix.mul_one, Matrix.zero_mul, zero_add, add_zero,
  Matrix.fromBlocks_one]
state_before: n : Type ?u.145025
p : Type ?u.145028
q : Type ?u.145031
l : Type u_1
R : Type u₂
inst✝⁸ : DecidableEq n
inst✝⁷ : DecidableEq p
inst✝⁶ : DecidableEq q
inst✝⁵ : DecidableEq l
inst✝⁴ : CommRing R
inst✝³ : Fintype p
inst✝² : Fintype q
inst✝¹ : Fintype l
inst✝ : Invertible 2
⊢ fromBlocks (1 ⬝ 1 + 0 ⬝ 0) (1 ⬝ 0 + 0 ⬝ ⅟(PD l R)) (0 ⬝ 1 + PD l R ⬝ 0) (0 ⬝ 0 + 1) = 1
Theorem: Nat.factorial_dvd_factorial
File: Mathlib/Data/Nat/Factorial/Basic.lean

tactic: induction' n with n IH
state_before: m✝ n✝ m n : ℕ
h : m ≤ n
⊢ m ! ∣ n !

tactic: obtain rfl | hl := h.eq_or_lt
state_before: case succ
m✝ n✝¹ m n✝ : ℕ
h✝ : m ≤ n✝
n : ℕ
IH : m ≤ n → m ! ∣ n !
h : m ≤ succ n
⊢ m ! ∣ (succ n)!

tactic: exact (IH (le_of_lt_succ hl)).mul_left _
state_before: case succ.inr
m✝ n✝¹ m n✝ : ℕ
h✝ : m ≤ n✝
n : ℕ
IH : m ≤ n → m ! ∣ n !
h : m ≤ succ n
hl : m < succ n
⊢ m ! ∣ (succ n)!

tactic: simp [Nat.eq_zero_of_le_zero h]
state_before: case zero
m✝ n✝ m n : ℕ
h✝ : m ≤ n
h : m ≤ zero
⊢ m ! ∣ zero !

tactic: simp
state_before: case succ.inl
m n✝¹ n✝ n : ℕ
h✝ : succ n ≤ n✝
IH : succ n ≤ n → (succ n)! ∣ n !
h : succ n ≤ succ n
⊢ (succ n)! ∣ (succ n)!
Theorem: MonoidHom.prod_unique
File: Mathlib/Algebra/Group/Prod.lean

tactic: simp only [prod_apply, coe_fst, coe_snd, comp_apply, Prod.mk.eta]
state_before: A : Type ?u.58502
B : Type ?u.58505
G : Type ?u.58508
H : Type ?u.58511
M : Type u_1
N : Type u_3
P : Type u_2
inst✝² : MulOneClass M
inst✝¹ : MulOneClass N
inst✝ : MulOneClass P
f : M →* N × P
x : M
⊢ ↑(MonoidHom.prod (comp (fst N P) f) (comp (snd N P) f)) x = ↑f x
Theorem: Basis.mk_coord_apply_ne
File: Mathlib/LinearAlgebra/Basis.lean

tactic: simp [hli.repr_eq_single j, h]
state_before: ι : Type u_1
ι' : Type ?u.843940
R : Type u_2
R₂ : Type ?u.843946
K : Type ?u.843949
M : Type u_3
M' : Type ?u.843955
M'' : Type ?u.843958
V : Type u
V' : Type ?u.843963
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x y : M
b : Basis ι R M
hli : LinearIndependent R v
hsp : ⊤ ≤ span R (Set.range v)
i j : ι
h : j ≠ i
⊢ ↑(↑(LinearIndependent.repr hli) { val := v j, property := (_ : v j ∈ ↑(span R (Set.range v))) }) i = 0
Theorem: String.all_eq
File: Std/Data/String/Lemmas.lean

tactic: rw [all, any_eq, List.all_eq_not_any_not]
state_before: s : String
p : Char → Bool
⊢ all s p = List.all s.data p
Theorem: TopologicalSpace.SecondCountableTopology.of_separableSpace_orderTopology
File: Mathlib/Topology/Order/Basic.lean

tactic: rcases exists_countable_dense α with ⟨s, hc, hd⟩
state_before: α : Type u
β : Type v
γ : Type w
inst✝⁴ : TopologicalSpace α
inst✝³ : LinearOrder α
inst✝² : OrderTopology α
inst✝¹ : DenselyOrdered α
inst✝ : SeparableSpace α
⊢ SecondCountableTopology α

tactic: refine ⟨⟨_, ?_, hd.topology_eq_generateFrom⟩⟩
state_before: case intro.intro
α : Type u
β : Type v
γ : Type w
inst✝⁴ : TopologicalSpace α
inst✝³ : LinearOrder α
inst✝² : OrderTopology α
inst✝¹ : DenselyOrdered α
inst✝ : SeparableSpace α
s : Set α
hc : Set.Countable s
hd : Dense s
⊢ SecondCountableTopology α

tactic: exact (hc.image _).union (hc.image _)
state_before: case intro.intro
α : Type u
β : Type v
γ : Type w
inst✝⁴ : TopologicalSpace α
inst✝³ : LinearOrder α
inst✝² : OrderTopology α
inst✝¹ : DenselyOrdered α
inst✝ : SeparableSpace α
s : Set α
hc : Set.Countable s
hd : Dense s
⊢ Set.Countable (Ioi '' s ∪ Iio '' s)
Theorem: MeasureTheory.integral_dirac
File: Mathlib/MeasureTheory/Integral/Bochner.lean

tactic: simp [Measure.dirac_apply_of_mem]
state_before: α : Type u_1
E : Type u_2
F : Type ?u.1486181
𝕜 : Type ?u.1486184
inst✝¹² : NormedAddCommGroup E
inst✝¹¹ : NormedSpace ℝ E
inst✝¹⁰ : CompleteSpace E
inst✝⁹ : NontriviallyNormedField 𝕜
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : SMulCommClass ℝ 𝕜 E
inst✝⁶ : NormedAddCommGroup F
inst✝⁵ : NormedSpace ℝ F
inst✝⁴ : CompleteSpace F
f✝ g : α → E
m : MeasurableSpace α
μ : Measure α
X : Type ?u.1488875
inst✝³ : TopologicalSpace X
inst✝² : FirstCountableTopology X
ν : Measure α
inst✝¹ : MeasurableSpace α
inst✝ : MeasurableSingletonClass α
f : α → E
a : α
⊢ (∫ (x : α), f a ∂Measure.dirac a) = f a
Theorem: ENNReal.coe_mem_upperBounds
File: Mathlib/Data/Real/ENNReal.lean

tactic: simp (config := { contextual := true }) [upperBounds, ball_image_iff, -mem_image, *]
state_before: α : Type ?u.146221
β : Type ?u.146224
a b c d : ℝ≥0∞
r p q : ℝ≥0
s : Set ℝ≥0
⊢ ↑r ∈ upperBounds (some '' s) ↔ r ∈ upperBounds s
Theorem: List.get?_zero_mul_tail_prod
File: Mathlib/Data/List/BigOperators/Basic.lean

tactic: cases l <;> simp
state_before: ι : Type ?u.67807
α : Type ?u.67810
M : Type u_1
N : Type ?u.67816
P : Type ?u.67819
M₀ : Type ?u.67822
G : Type ?u.67825
R : Type ?u.67828
inst✝² : Monoid M
inst✝¹ : Monoid N
inst✝ : Monoid P
l✝ l₁ l₂ : List M
a : M
l : List M
⊢ Option.getD (get? l 0) 1 * prod (tail l) = prod l
Theorem: StrictConvex.eq_of_openSegment_subset_frontier
File: Mathlib/Analysis/Convex/Strict.lean

tactic: obtain ⟨a, ha₀, ha₁⟩ := DenselyOrdered.dense (0 : 𝕜) 1 zero_lt_one
state_before: 𝕜 : Type u_1
𝕝 : Type ?u.173927
E : Type u_2
F : Type ?u.173933
β : Type ?u.173936
inst✝⁸ : OrderedRing 𝕜
inst✝⁷ : TopologicalSpace E
inst✝⁶ : TopologicalSpace F
inst✝⁵ : AddCommGroup E
inst✝⁴ : AddCommGroup F
inst✝³ : Module 𝕜 E
inst✝² : Module 𝕜 F
s t : Set E
x y : E
inst✝¹ : Nontrivial 𝕜
inst✝ : DenselyOrdered 𝕜
hs : StrictConvex 𝕜 s
hx : x ∈ s
hy : y ∈ s
h : openSegment 𝕜 x y ⊆ frontier s
⊢ x = y

tactic: classical
  by_contra hxy
  exact
    (h ⟨a, 1 - a, ha₀, sub_pos_of_lt ha₁, add_sub_cancel'_right _ _, rfl⟩).2
      (hs hx hy hxy ha₀ (sub_pos_of_lt ha₁) <| add_sub_cancel'_right _ _)
state_before: case intro.intro
𝕜 : Type u_1
𝕝 : Type ?u.173927
E : Type u_2
F : Type ?u.173933
β : Type ?u.173936
inst✝⁸ : OrderedRing 𝕜
inst✝⁷ : TopologicalSpace E
inst✝⁶ : TopologicalSpace F
inst✝⁵ : AddCommGroup E
inst✝⁴ : AddCommGroup F
inst✝³ : Module 𝕜 E
inst✝² : Module 𝕜 F
s t : Set E
x y : E
inst✝¹ : Nontrivial 𝕜
inst✝ : DenselyOrdered 𝕜
hs : StrictConvex 𝕜 s
hx : x ∈ s
hy : y ∈ s
h : openSegment 𝕜 x y ⊆ frontier s
a : 𝕜
ha₀ : 0 < a
ha₁ : a < 1
⊢ x = y

tactic: by_contra hxy
state_before: case intro.intro
𝕜 : Type u_1
𝕝 : Type ?u.173927
E : Type u_2
F : Type ?u.173933
β : Type ?u.173936
inst✝⁸ : OrderedRing 𝕜
inst✝⁷ : TopologicalSpace E
inst✝⁶ : TopologicalSpace F
inst✝⁵ : AddCommGroup E
inst✝⁴ : AddCommGroup F
inst✝³ : Module 𝕜 E
inst✝² : Module 𝕜 F
s t : Set E
x y : E
inst✝¹ : Nontrivial 𝕜
inst✝ : DenselyOrdered 𝕜
hs : StrictConvex 𝕜 s
hx : x ∈ s
hy : y ∈ s
h : openSegment 𝕜 x y ⊆ frontier s
a : 𝕜
ha₀ : 0 < a
ha₁ : a < 1
⊢ x = y

tactic: exact
  (h ⟨a, 1 - a, ha₀, sub_pos_of_lt ha₁, add_sub_cancel'_right _ _, rfl⟩).2
    (hs hx hy hxy ha₀ (sub_pos_of_lt ha₁) <| add_sub_cancel'_right _ _)
state_before: case intro.intro
𝕜 : Type u_1
𝕝 : Type ?u.173927
E : Type u_2
F : Type ?u.173933
β : Type ?u.173936
inst✝⁸ : OrderedRing 𝕜
inst✝⁷ : TopologicalSpace E
inst✝⁶ : TopologicalSpace F
inst✝⁵ : AddCommGroup E
inst✝⁴ : AddCommGroup F
inst✝³ : Module 𝕜 E
inst✝² : Module 𝕜 F
s t : Set E
x y : E
inst✝¹ : Nontrivial 𝕜
inst✝ : DenselyOrdered 𝕜
hs : StrictConvex 𝕜 s
hx : x ∈ s
hy : y ∈ s
h : openSegment 𝕜 x y ⊆ frontier s
a : 𝕜
ha₀ : 0 < a
ha₁ : a < 1
hxy : ¬x = y
⊢ False
Theorem: Set.chainHeight_eq_iSup_Ici
File: Mathlib/Order/Height.lean

tactic: apply le_antisymm
state_before: α : Type u_1
β : Type ?u.32030
s t : Set α
inst✝ : Preorder α
⊢ chainHeight s = ⨆ (i : α) (_ : i ∈ s), chainHeight (s ∩ Ici i)

tactic: refine' iSup₂_le _
state_before: case a
α : Type u_1
β : Type ?u.32030
s t : Set α
inst✝ : Preorder α
⊢ chainHeight s ≤ ⨆ (i : α) (_ : i ∈ s), chainHeight (s ∩ Ici i)

tactic: rintro (_ | ⟨x, xs⟩) h
state_before: case a
α : Type u_1
β : Type ?u.32030
s t : Set α
inst✝ : Preorder α
⊢ ∀ (i : List α), i ∈ subchain s → ↑(length i) ≤ ⨆ (i : α) (_ : i ∈ s), chainHeight (s ∩ Ici i)

tactic: exact zero_le _
state_before: case a.nil
α : Type u_1
β : Type ?u.32030
s t : Set α
inst✝ : Preorder α
h : [] ∈ subchain s
⊢ ↑(length []) ≤ ⨆ (i : α) (_ : i ∈ s), chainHeight (s ∩ Ici i)

tactic: apply le_trans _ (le_iSup₂ x (cons_mem_subchain_iff.mp h).1)
state_before: case a.cons
α : Type u_1
β : Type ?u.32030
s t : Set α
inst✝ : Preorder α
x : α
xs : List α
h : x :: xs ∈ subchain s
⊢ ↑(length (x :: xs)) ≤ ⨆ (i : α) (_ : i ∈ s), chainHeight (s ∩ Ici i)

tactic: apply length_le_chainHeight_of_mem_subchain
state_before: α : Type u_1
β : Type ?u.32030
s t : Set α
inst✝ : Preorder α
x : α
xs : List α
h : x :: xs ∈ subchain s
⊢ ↑(length (x :: xs)) ≤ chainHeight (s ∩ Ici x)

tactic: refine' ⟨h.1, fun i hi ↦ ⟨h.2 i hi, _⟩⟩
state_before: case hl
α : Type u_1
β : Type ?u.32030
s t : Set α
inst✝ : Preorder α
x : α
xs : List α
h : x :: xs ∈ subchain s
⊢ x :: xs ∈ subchain (s ∩ Ici x)

tactic: cases hi
state_before: case hl
α : Type u_1
β : Type ?u.32030
s t : Set α
inst✝ : Preorder α
x : α
xs : List α
h : x :: xs ∈ subchain s
i : α
hi : i ∈ x :: xs
⊢ i ∈ Ici x

tactic: rename_i hi
state_before: case hl.tail
α : Type u_1
β : Type ?u.32030
s t : Set α
inst✝ : Preorder α
x : α
xs : List α
h : x :: xs ∈ subchain s
i : α
a✝ : Mem i xs
⊢ i ∈ Ici x

tactic: cases' chain'_iff_pairwise.mp h.1 with _ _ h'
state_before: case hl.tail
α : Type u_1
β : Type ?u.32030
s t : Set α
inst✝ : Preorder α
x : α
xs : List α
h : x :: xs ∈ subchain s
i : α
hi : Mem i xs
⊢ i ∈ Ici x

tactic: exact (h' _ hi).le
state_before: case hl.tail.cons
α : Type u_1
β : Type ?u.32030
s t : Set α
inst✝ : Preorder α
x : α
xs : List α
h : x :: xs ∈ subchain s
i : α
hi : Mem i xs
a✝ : List.Pairwise (fun x x_1 => x < x_1) xs
h' : ∀ (a' : α), a' ∈ xs → x < a'
⊢ i ∈ Ici x

tactic: exact left_mem_Ici
state_before: case hl.head
α : Type u_1
β : Type ?u.32030
s t : Set α
inst✝ : Preorder α
x : α
xs : List α
h : x :: xs ∈ subchain s
⊢ x ∈ Ici x

tactic: exact iSup₂_le fun i _ ↦ chainHeight_mono <| Set.inter_subset_left _ _
state_before: case a
α : Type u_1
β : Type ?u.32030
s t : Set α
inst✝ : Preorder α
⊢ (⨆ (i : α) (_ : i ∈ s), chainHeight (s ∩ Ici i)) ≤ chainHeight s
Theorem: Submodule.fg_induction
File: Mathlib/RingTheory/Finiteness.lean

tactic: obtain ⟨s, rfl⟩ := hN
state_before: R✝ : Type ?u.243597
M✝ : Type ?u.243600
inst✝⁷ : Semiring R✝
inst✝⁶ : AddCommMonoid M✝
inst✝⁵ : Module R✝ M✝
P✝ : Type ?u.243636
inst✝⁴ : AddCommMonoid P✝
inst✝³ : Module R✝ P✝
f : M✝ →ₗ[R✝] P✝
R : Type u_1
M : Type u_2
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
P : Submodule R M → Prop
h₁ : ∀ (x : M), P (span R {x})
h₂ : ∀ (M₁ M₂ : Submodule R M), P M₁ → P M₂ → P (M₁ ⊔ M₂)
N : Submodule R M
hN : FG N
⊢ P N

tactic: induction s using Finset.induction
state_before: case intro
R✝ : Type ?u.243597
M✝ : Type ?u.243600
inst✝⁷ : Semiring R✝
inst✝⁶ : AddCommMonoid M✝
inst✝⁵ : Module R✝ M✝
P✝ : Type ?u.243636
inst✝⁴ : AddCommMonoid P✝
inst✝³ : Module R✝ P✝
f : M✝ →ₗ[R✝] P✝
R : Type u_1
M : Type u_2
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
P : Submodule R M → Prop
h₁ : ∀ (x : M), P (span R {x})
h₂ : ∀ (M₁ M₂ : Submodule R M), P M₁ → P M₂ → P (M₁ ⊔ M₂)
s : Finset M
⊢ P (span R ↑s)

tactic: rw [Finset.coe_empty, Submodule.span_empty, ← Submodule.span_zero_singleton]
state_before: case intro.empty
R✝ : Type ?u.243597
M✝ : Type ?u.243600
inst✝⁷ : Semiring R✝
inst✝⁶ : AddCommMonoid M✝
inst✝⁵ : Module R✝ M✝
P✝ : Type ?u.243636
inst✝⁴ : AddCommMonoid P✝
inst✝³ : Module R✝ P✝
f : M✝ →ₗ[R✝] P✝
R : Type u_1
M : Type u_2
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
P : Submodule R M → Prop
h₁ : ∀ (x : M), P (span R {x})
h₂ : ∀ (M₁ M₂ : Submodule R M), P M₁ → P M₂ → P (M₁ ⊔ M₂)
⊢ P (span R ↑∅)

tactic: apply h₁
state_before: case intro.empty
R✝ : Type ?u.243597
M✝ : Type ?u.243600
inst✝⁷ : Semiring R✝
inst✝⁶ : AddCommMonoid M✝
inst✝⁵ : Module R✝ M✝
P✝ : Type ?u.243636
inst✝⁴ : AddCommMonoid P✝
inst✝³ : Module R✝ P✝
f : M✝ →ₗ[R✝] P✝
R : Type u_1
M : Type u_2
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
P : Submodule R M → Prop
h₁ : ∀ (x : M), P (span R {x})
h₂ : ∀ (M₁ M₂ : Submodule R M), P M₁ → P M₂ → P (M₁ ⊔ M₂)
⊢ P (span R {0})

tactic: rw [Finset.coe_insert, Submodule.span_insert]
state_before: case intro.insert
R✝ : Type ?u.243597
M✝ : Type ?u.243600
inst✝⁷ : Semiring R✝
inst✝⁶ : AddCommMonoid M✝
inst✝⁵ : Module R✝ M✝
P✝ : Type ?u.243636
inst✝⁴ : AddCommMonoid P✝
inst✝³ : Module R✝ P✝
f : M✝ →ₗ[R✝] P✝
R : Type u_1
M : Type u_2
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
P : Submodule R M → Prop
h₁ : ∀ (x : M), P (span R {x})
h₂ : ∀ (M₁ M₂ : Submodule R M), P M₁ → P M₂ → P (M₁ ⊔ M₂)
a✝² : M
s✝ : Finset M
a✝¹ : ¬a✝² ∈ s✝
a✝ : P (span R ↑s✝)
⊢ P (span R ↑(insert a✝² s✝))

tactic: apply h₂ <;> apply_assumption
state_before: case intro.insert
R✝ : Type ?u.243597
M✝ : Type ?u.243600
inst✝⁷ : Semiring R✝
inst✝⁶ : AddCommMonoid M✝
inst✝⁵ : Module R✝ M✝
P✝ : Type ?u.243636
inst✝⁴ : AddCommMonoid P✝
inst✝³ : Module R✝ P✝
f : M✝ →ₗ[R✝] P✝
R : Type u_1
M : Type u_2
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
P : Submodule R M → Prop
h₁ : ∀ (x : M), P (span R {x})
h₂ : ∀ (M₁ M₂ : Submodule R M), P M₁ → P M₂ → P (M₁ ⊔ M₂)
a✝² : M
s✝ : Finset M
a✝¹ : ¬a✝² ∈ s✝
a✝ : P (span R ↑s✝)
⊢ P (span R {a✝²} ⊔ span R ↑s✝)
Theorem: discreteTopology_iff_nhds
File: Mathlib/Topology/Order.lean

tactic: simp only [discreteTopology_iff_singleton_mem_nhds, ← nhds_neBot.le_pure_iff, le_pure_iff]
state_before: α : Type u_1
t t₁ t₂ : TopologicalSpace α
s : Set α
inst✝ : TopologicalSpace α
⊢ DiscreteTopology α ↔ ∀ (x : α), 𝓝 x = pure x
Theorem: imageToKernel_epi_comp
File: Mathlib/Algebra/Homology/ImageToKernel.lean

tactic: simpa using w
state_before: ι : Type ?u.17286
V : Type u
inst✝⁴ : Category V
inst✝³ : HasZeroMorphisms V
A B C : V
f : A ⟶ B
g : B ⟶ C
inst✝² : HasKernels V
inst✝¹ : HasImages V
Z : V
h : Z ⟶ A
inst✝ : Epi h
w : (h ≫ f) ≫ g = 0
⊢ h ≫ f ≫ g = h ≫ 0

tactic: ext
state_before: ι : Type ?u.17286
V : Type u
inst✝⁴ : Category V
inst✝³ : HasZeroMorphisms V
A B C : V
f : A ⟶ B
g : B ⟶ C
inst✝² : HasKernels V
inst✝¹ : HasImages V
Z : V
h : Z ⟶ A
inst✝ : Epi h
w : (h ≫ f) ≫ g = 0
⊢ imageToKernel (h ≫ f) g w =
    Subobject.ofLE (imageSubobject (h ≫ f)) (imageSubobject f) (_ : imageSubobject (h ≫ f) ≤ imageSubobject f) ≫
      imageToKernel f g (_ : f ≫ g = 0)

tactic: simp
state_before: case h
ι : Type ?u.17286
V : Type u
inst✝⁴ : Category V
inst✝³ : HasZeroMorphisms V
A B C : V
f : A ⟶ B
g : B ⟶ C
inst✝² : HasKernels V
inst✝¹ : HasImages V
Z : V
h : Z ⟶ A
inst✝ : Epi h
w : (h ≫ f) ≫ g = 0
⊢ imageToKernel (h ≫ f) g w ≫ Subobject.arrow (kernelSubobject g) =
    (Subobject.ofLE (imageSubobject (h ≫ f)) (imageSubobject f) (_ : imageSubobject (h ≫ f) ≤ imageSubobject f) ≫
        imageToKernel f g (_ : f ≫ g = 0)) ≫
      Subobject.arrow (kernelSubobject g)
Theorem: half_sub
File: Mathlib/Algebra/CharZero/Lemmas.lean

tactic: rw [← neg_sub, sub_half]
state_before: R : Type u_1
inst✝¹ : DivisionRing R
inst✝ : CharZero R
a : R
⊢ a / 2 - a = -(a / 2)
Theorem: Matrix.det_neg
File: Mathlib/LinearAlgebra/Matrix/Determinant.lean

tactic: rw [← det_smul, neg_one_smul]
state_before: m : Type ?u.1375840
n : Type u_1
inst✝⁴ : DecidableEq n
inst✝³ : Fintype n
inst✝² : DecidableEq m
inst✝¹ : Fintype m
R : Type v
inst✝ : CommRing R
A : Matrix n n R
⊢ det (-A) = (-1) ^ Fintype.card n * det A
Theorem: IsSMulRegular.not_zero_iff
File: Mathlib/Algebra/Regular/SMul.lean

tactic: rw [nontrivial_iff, not_iff_comm, zero_iff_subsingleton, subsingleton_iff]
state_before: R : Type u_1
S : Type ?u.26076
M : Type u_2
a b : R
s : S
inst✝⁶ : MonoidWithZero R
inst✝⁵ : MonoidWithZero S
inst✝⁴ : Zero M
inst✝³ : MulActionWithZero R M
inst✝² : MulActionWithZero R S
inst✝¹ : MulActionWithZero S M
inst✝ : IsScalarTower R S M
⊢ ¬IsSMulRegular M 0 ↔ Nontrivial M

tactic: push_neg
state_before: R : Type u_1
S : Type ?u.26076
M : Type u_2
a b : R
s : S
inst✝⁶ : MonoidWithZero R
inst✝⁵ : MonoidWithZero S
inst✝⁴ : Zero M
inst✝³ : MulActionWithZero R M
inst✝² : MulActionWithZero R S
inst✝¹ : MulActionWithZero S M
inst✝ : IsScalarTower R S M
⊢ (¬∃ x y, x ≠ y) ↔ ∀ (x y : M), x = y

tactic: exact Iff.rfl
state_before: R : Type u_1
S : Type ?u.26076
M : Type u_2
a b : R
s : S
inst✝⁶ : MonoidWithZero R
inst✝⁵ : MonoidWithZero S
inst✝⁴ : Zero M
inst✝³ : MulActionWithZero R M
inst✝² : MulActionWithZero R S
inst✝¹ : MulActionWithZero S M
inst✝ : IsScalarTower R S M
⊢ (∀ (x y : M), x = y) ↔ ∀ (x y : M), x = y
Theorem: Metric.cthickening_max_zero
File: Mathlib/Topology/MetricSpace/HausdorffDistance.lean

tactic: cases le_total δ 0 <;> simp [cthickening_of_nonpos, *]
state_before: ι : Sort ?u.102452
α : Type u
β : Type v
inst✝ : PseudoEMetricSpace α
δ✝ ε : ℝ
s t : Set α
x : α
δ : ℝ
E : Set α
⊢ cthickening (max 0 δ) E = cthickening δ E
Theorem: Matrix.vecMulVec_eq
File: Mathlib/Data/Matrix/Basic.lean

tactic: ext
state_before: l : Type ?u.832218
m : Type u_1
n : Type u_2
o : Type ?u.832227
m' : o → Type ?u.832232
n' : o → Type ?u.832237
R : Type ?u.832240
S : Type ?u.832243
α : Type v
β : Type w
γ : Type ?u.832250
inst✝¹ : Mul α
inst✝ : AddCommMonoid α
w : m → α
v : n → α
⊢ vecMulVec w v = col w ⬝ row v

tactic: simp only [vecMulVec, mul_apply, Fintype.univ_punit, Finset.sum_singleton]
state_before: case a.h
l : Type ?u.832218
m : Type u_1
n : Type u_2
o : Type ?u.832227
m' : o → Type ?u.832232
n' : o → Type ?u.832237
R : Type ?u.832240
S : Type ?u.832243
α : Type v
β : Type w
γ : Type ?u.832250
inst✝¹ : Mul α
inst✝ : AddCommMonoid α
w : m → α
v : n → α
i✝ : m
x✝ : n
⊢ vecMulVec w v i✝ x✝ = (col w ⬝ row v) i✝ x✝

tactic: rfl
state_before: case a.h
l : Type ?u.832218
m : Type u_1
n : Type u_2
o : Type ?u.832227
m' : o → Type ?u.832232
n' : o → Type ?u.832237
R : Type ?u.832240
S : Type ?u.832243
α : Type v
β : Type w
γ : Type ?u.832250
inst✝¹ : Mul α
inst✝ : AddCommMonoid α
w : m → α
v : n → α
i✝ : m
x✝ : n
⊢ ↑of (fun x y => w x * v y) i✝ x✝ = col w i✝ PUnit.unit * row v PUnit.unit x✝
Theorem: Matrix.kroneckerMapBilinear_mul_mul
File: Mathlib/Data/Matrix/Kronecker.lean

tactic: ext (⟨i, i'⟩⟨j, j'⟩)
state_before: R : Type u_1
α : Type u_4
α' : Type ?u.35756
β : Type u_5
β' : Type ?u.35762
γ : Type u_6
γ' : Type ?u.35768
l : Type u_7
m : Type u_2
n : Type u_8
p : Type ?u.35780
q : Type ?u.35783
r : Type ?u.35786
l' : Type u_9
m' : Type u_3
n' : Type u_10
p' : Type ?u.35798
inst✝⁸ : CommSemiring R
inst✝⁷ : Fintype m
inst✝⁶ : Fintype m'
inst✝⁵ : NonUnitalNonAssocSemiring α
inst✝⁴ : NonUnitalNonAssocSemiring β
inst✝³ : NonUnitalNonAssocSemiring γ
inst✝² : Module R α
inst✝¹ : Module R β
inst✝ : Module R γ
f : α →ₗ[R] β →ₗ[R] γ
h_comm : ∀ (a b : α) (a' b' : β), ↑(↑f (a * b)) (a' * b') = ↑(↑f a) a' * ↑(↑f b) b'
A : Matrix l m α
B : Matrix m n α
A' : Matrix l' m' β
B' : Matrix m' n' β
⊢ ↑(↑(kroneckerMapBilinear f) (A ⬝ B)) (A' ⬝ B') = ↑(↑(kroneckerMapBilinear f) A) A' ⬝ ↑(↑(kroneckerMapBilinear f) B) B'

tactic: simp only [kroneckerMapBilinear_apply_apply, mul_apply, ← Finset.univ_product_univ,
  Finset.sum_product, kroneckerMap_apply]
state_before: case a.mk.h.mk
R : Type u_1
α : Type u_4
α' : Type ?u.35756
β : Type u_5
β' : Type ?u.35762
γ : Type u_6
γ' : Type ?u.35768
l : Type u_7
m : Type u_2
n : Type u_8
p : Type ?u.35780
q : Type ?u.35783
r : Type ?u.35786
l' : Type u_9
m' : Type u_3
n' : Type u_10
p' : Type ?u.35798
inst✝⁸ : CommSemiring R
inst✝⁷ : Fintype m
inst✝⁶ : Fintype m'
inst✝⁵ : NonUnitalNonAssocSemiring α
inst✝⁴ : NonUnitalNonAssocSemiring β
inst✝³ : NonUnitalNonAssocSemiring γ
inst✝² : Module R α
inst✝¹ : Module R β
inst✝ : Module R γ
f : α →ₗ[R] β →ₗ[R] γ
h_comm : ∀ (a b : α) (a' b' : β), ↑(↑f (a * b)) (a' * b') = ↑(↑f a) a' * ↑(↑f b) b'
A : Matrix l m α
B : Matrix m n α
A' : Matrix l' m' β
B' : Matrix m' n' β
i : l
i' : l'
j : n
j' : n'
⊢ ↑(↑(kroneckerMapBilinear f) (A ⬝ B)) (A' ⬝ B') (i, i') (j, j') =
    (↑(↑(kroneckerMapBilinear f) A) A' ⬝ ↑(↑(kroneckerMapBilinear f) B) B') (i, i') (j, j')

tactic: simp_rw [f.map_sum, LinearMap.sum_apply, LinearMap.map_sum, h_comm]
state_before: case a.mk.h.mk
R : Type u_1
α : Type u_4
α' : Type ?u.35756
β : Type u_5
β' : Type ?u.35762
γ : Type u_6
γ' : Type ?u.35768
l : Type u_7
m : Type u_2
n : Type u_8
p : Type ?u.35780
q : Type ?u.35783
r : Type ?u.35786
l' : Type u_9
m' : Type u_3
n' : Type u_10
p' : Type ?u.35798
inst✝⁸ : CommSemiring R
inst✝⁷ : Fintype m
inst✝⁶ : Fintype m'
inst✝⁵ : NonUnitalNonAssocSemiring α
inst✝⁴ : NonUnitalNonAssocSemiring β
inst✝³ : NonUnitalNonAssocSemiring γ
inst✝² : Module R α
inst✝¹ : Module R β
inst✝ : Module R γ
f : α →ₗ[R] β →ₗ[R] γ
h_comm : ∀ (a b : α) (a' b' : β), ↑(↑f (a * b)) (a' * b') = ↑(↑f a) a' * ↑(↑f b) b'
A : Matrix l m α
B : Matrix m n α
A' : Matrix l' m' β
B' : Matrix m' n' β
i : l
i' : l'
j : n
j' : n'
⊢ ↑(↑f (Finset.sum Finset.univ fun j_1 => A i j_1 * B j_1 j)) (Finset.sum Finset.univ fun j => A' i' j * B' j j') =
    Finset.sum Finset.univ fun x =>
      Finset.sum Finset.univ fun x_1 => ↑(↑f (A i x)) (A' i' x_1) * ↑(↑f (B x j)) (B' x_1 j')
Theorem: EMetric.diam_triple
File: Mathlib/Topology/MetricSpace/EMetricSpace.lean

tactic: simp only [diam_insert, iSup_insert, iSup_singleton, diam_singleton, ENNReal.max_zero_right,
  ENNReal.sup_eq_max]
state_before: α : Type u
β : Type v
X : Type ?u.296899
inst✝ : PseudoEMetricSpace α
x y z : α
ε ε₁ ε₂ : ℝ≥0∞
s t : Set α
⊢ diam {x, y, z} = max (max (edist x y) (edist x z)) (edist y z)
Theorem: toIocMod_zsmul_add
File: Mathlib/Algebra/Order/ToIntervalMod.lean

tactic: rw [add_comm, toIocMod_add_zsmul]
state_before: α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a✝ b✝ c : α
n : ℤ
a b : α
m : ℤ
⊢ toIocMod hp a (m • p + b) = toIocMod hp a b
Theorem: Polynomial.eraseLead_monomial
File: Mathlib/Data/Polynomial/EraseLead.lean

tactic: by_cases hr : r = 0
state_before: R : Type u_1
inst✝ : Semiring R
f : R[X]
i : ℕ
r : R
⊢ eraseLead (↑(monomial i) r) = 0

tactic: subst r
state_before: case pos
R : Type u_1
inst✝ : Semiring R
f : R[X]
i : ℕ
r : R
hr : r = 0
⊢ eraseLead (↑(monomial i) r) = 0

tactic: simp only [monomial_zero_right, eraseLead_zero]
state_before: case pos
R : Type u_1
inst✝ : Semiring R
f : R[X]
i : ℕ
⊢ eraseLead (↑(monomial i) 0) = 0

tactic: rw [eraseLead, natDegree_monomial, if_neg hr, erase_monomial]
state_before: case neg
R : Type u_1
inst✝ : Semiring R
f : R[X]
i : ℕ
r : R
hr : ¬r = 0
⊢ eraseLead (↑(monomial i) r) = 0
Theorem: PolyEquivTensor.toFunLinear_mul_tmul_mul_aux_1
File: Mathlib/RingTheory/PolynomialAlgebra.lean

tactic: classical split_ifs <;> simp [*]
state_before: R : Type u_1
A : Type u_2
inst✝² : CommSemiring R
inst✝¹ : Semiring A
inst✝ : Algebra R A
p : R[X]
k : ℕ
h : Decidable ¬coeff p k = 0
a : A
⊢ (if ¬coeff p k = 0 then a * ↑(algebraMap R A) (coeff p k) else 0) = a * ↑(algebraMap R A) (coeff p k)

tactic: split_ifs <;> simp [*]
state_before: R : Type u_1
A : Type u_2
inst✝² : CommSemiring R
inst✝¹ : Semiring A
inst✝ : Algebra R A
p : R[X]
k : ℕ
h : Decidable ¬coeff p k = 0
a : A
⊢ (if ¬coeff p k = 0 then a * ↑(algebraMap R A) (coeff p k) else 0) = a * ↑(algebraMap R A) (coeff p k)
Theorem: Ideal.span_singleton_mul_le_span_singleton_mul
File: Mathlib/RingTheory/Ideal/Operations.lean

tactic: simp only [span_singleton_mul_le_iff, mem_span_singleton_mul, eq_comm]
state_before: R : Type u
ι : Type ?u.234437
inst✝ : CommSemiring R
I✝ J✝ K L : Ideal R
x y : R
I J : Ideal R
⊢ span {x} * I ≤ span {y} * J ↔ ∀ (zI : R), zI ∈ I → ∃ zJ, zJ ∈ J ∧ x * zI = y * zJ