1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: Equiv.piCongrLeft'_symm_apply_apply
File: Mathlib/Logic/Equiv/Basic.lean

tactic: change Eq.ndrec _ _ = _
state_before: α : Sort u_2
β : Sort u_3
P✝ : α → Sort w
e✝ : α ≃ β
P : α → Sort u_1
e : α ≃ β
g : (b : β) → P (e.symm b)
b : β
⊢ (piCongrLeft' P e).symm g (e.symm b) = g b
state_after: α : Sort u_2
β : Sort u_3
P✝ : α → Sort w
e✝ : α ≃ β
P : α → Sort u_1
e : α ≃ β
g : (b : β) → P (e.symm b)
b : β
⊢ ⋯ ▸ g (e (e.symm b)) = g b

tactic: generalize_proofs hZa
state_before: α : Sort u_2
β : Sort u_3
P✝ : α → Sort w
e✝ : α ≃ β
P : α → Sort u_1
e : α ≃ β
g : (b : β) → P (e.symm b)
b : β
⊢ ⋯ ▸ g (e (e.symm b)) = g b
state_after: α : Sort u_2
β : Sort u_3
P✝ : α → Sort w
e✝ : α ≃ β
P : α → Sort u_1
e : α ≃ β
g : (b : β) → P (e.symm b)
b : β
hZa : e.symm (e (e.symm b)) = e.symm b
⊢ hZa ▸ g (e (e.symm b)) = g b

tactic: revert hZa
state_before: α : Sort u_2
β : Sort u_3
P✝ : α → Sort w
e✝ : α ≃ β
P : α → Sort u_1
e : α ≃ β
g : (b : β) → P (e.symm b)
b : β
hZa : e.symm (e (e.symm b)) = e.symm b
⊢ hZa ▸ g (e (e.symm b)) = g b
state_after: α : Sort u_2
β : Sort u_3
P✝ : α → Sort w
e✝ : α ≃ β
P : α → Sort u_1
e : α ≃ β
g : (b : β) → P (e.symm b)
b : β
⊢ ∀ (hZa : e.symm (e (e.symm b)) = e.symm b), hZa ▸ g (e (e.symm b)) = g b

tactic: rw [e.apply_symm_apply b]
state_before: α : Sort u_2
β : Sort u_3
P✝ : α → Sort w
e✝ : α ≃ β
P : α → Sort u_1
e : α ≃ β
g : (b : β) → P (e.symm b)
b : β
⊢ ∀ (hZa : e.symm (e (e.symm b)) = e.symm b), hZa ▸ g (e (e.symm b)) = g b
state_after: α : Sort u_2
β : Sort u_3
P✝ : α → Sort w
e✝ : α ≃ β
P : α → Sort u_1
e : α ≃ β
g : (b : β) → P (e.symm b)
b : β
⊢ ∀ (hZa : e.symm b = e.symm b), hZa ▸ g b = g b

tactic: simp
state_before: α : Sort u_2
β : Sort u_3
P✝ : α → Sort w
e✝ : α ≃ β
P : α → Sort u_1
e : α ≃ β
g : (b : β) → P (e.symm b)
b : β
⊢ ∀ (hZa : e.symm b = e.symm b), hZa ▸ g b = g b
state_after: no goals
Theorem: Finsupp.finsuppProdLEquiv_apply
File: Mathlib/LinearAlgebra/Finsupp.lean

tactic: rw [finsuppProdLEquiv, LinearEquiv.coe_mk, finsuppProdEquiv, Finsupp.curry_apply]
state_before: α✝ : Type u_1
M✝ : Type u_2
N : Type u_3
P : Type u_4
R✝ : Type u_5
S : Type u_6
inst✝¹⁰ : Semiring R✝
inst✝⁹ : Semiring S
inst✝⁸ : AddCommMonoid M✝
inst✝⁷ : Module R✝ M✝
inst✝⁶ : AddCommMonoid N
inst✝⁵ : Module R✝ N
inst✝⁴ : AddCommMonoid P
inst✝³ : Module R✝ P
α : Type u_7
β : Type u_8
R : Type u_9
M : Type u_10
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
f : α × β →₀ M
x : α
y : β
⊢ (((finsuppProdLEquiv R) f) x) y = f (x, y)
state_after: no goals
Theorem: NonemptyInterval.coe_eq_pure
File: Mathlib/Order/Interval/Basic.lean

tactic: rw [← Interval.coe_inj, coe_pure_interval]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Sort u_5
κ : ι → Sort u_6
inst✝ : Preorder α
s : NonemptyInterval α
a : α
⊢ ↑s = Interval.pure a ↔ s = pure a
state_after: no goals
Theorem: Polynomial.support_integralNormalization
File: Mathlib/RingTheory/Polynomial/IntegralNormalization.lean

tactic: by_cases hf : f = 0
state_before: R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Ring R
inst✝ : IsDomain R
f : R[X]
⊢ f.integralNormalization.support = f.support
state_after: case pos
R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Ring R
inst✝ : IsDomain R
f : R[X]
hf : f = 0
⊢ f.integralNormalization.support = f.support

case neg
R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Ring R
inst✝ : IsDomain R
f : R[X]
hf : ¬f = 0
⊢ f.integralNormalization.support = f.support

tactic: ext i
state_before: case neg
R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Ring R
inst✝ : IsDomain R
f : R[X]
hf : ¬f = 0
⊢ f.integralNormalization.support = f.support
state_after: case neg.a
R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Ring R
inst✝ : IsDomain R
f : R[X]
hf : ¬f = 0
i : ℕ
⊢ i ∈ f.integralNormalization.support ↔ i ∈ f.support

tactic: refine ⟨fun h => integralNormalization_support h, ?_⟩
state_before: case neg.a
R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Ring R
inst✝ : IsDomain R
f : R[X]
hf : ¬f = 0
i : ℕ
⊢ i ∈ f.integralNormalization.support ↔ i ∈ f.support
state_after: case neg.a
R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Ring R
inst✝ : IsDomain R
f : R[X]
hf : ¬f = 0
i : ℕ
⊢ i ∈ f.support → i ∈ f.integralNormalization.support

tactic: simp only [integralNormalization_coeff, mem_support_iff]
state_before: case neg.a
R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Ring R
inst✝ : IsDomain R
f : R[X]
hf : ¬f = 0
i : ℕ
⊢ i ∈ f.support → i ∈ f.integralNormalization.support
state_after: case neg.a
R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Ring R
inst✝ : IsDomain R
f : R[X]
hf : ¬f = 0
i : ℕ
⊢ f.coeff i ≠ 0 → (if f.degree = ↑i then 1 else f.coeff i * f.leadingCoeff ^ (f.natDegree - 1 - i)) ≠ 0

tactic: intro hfi
state_before: case neg.a
R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Ring R
inst✝ : IsDomain R
f : R[X]
hf : ¬f = 0
i : ℕ
⊢ f.coeff i ≠ 0 → (if f.degree = ↑i then 1 else f.coeff i * f.leadingCoeff ^ (f.natDegree - 1 - i)) ≠ 0
state_after: case neg.a
R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Ring R
inst✝ : IsDomain R
f : R[X]
hf : ¬f = 0
i : ℕ
hfi : f.coeff i ≠ 0
⊢ (if f.degree = ↑i then 1 else f.coeff i * f.leadingCoeff ^ (f.natDegree - 1 - i)) ≠ 0

tactic: split_ifs with hi <;> simp [hf, hfi, hi]
state_before: case neg.a
R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Ring R
inst✝ : IsDomain R
f : R[X]
hf : ¬f = 0
i : ℕ
hfi : f.coeff i ≠ 0
⊢ (if f.degree = ↑i then 1 else f.coeff i * f.leadingCoeff ^ (f.natDegree - 1 - i)) ≠ 0
state_after: no goals

tactic: simp [hf]
state_before: case pos
R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Ring R
inst✝ : IsDomain R
f : R[X]
hf : f = 0
⊢ f.integralNormalization.support = f.support
state_after: no goals
Theorem: ByteArray.append_data
File: .lake/packages/batteries/Batteries/Data/ByteArray.lean

tactic: rw [←append_eq]
state_before: a b : ByteArray
⊢ (a ++ b).data = a.data ++ b.data
state_after: a b : ByteArray
⊢ (a.append b).data = a.data ++ b.data

tactic: simp [ByteArray.append, size]
state_before: a b : ByteArray
⊢ (a.append b).data = a.data ++ b.data
state_after: a b : ByteArray
⊢ a.data ++ b.data ++ a.data.extract (a.data.size + b.data.size) a.data.size = a.data ++ b.data

tactic: rw [Array.extract_empty_of_stop_le_start (h:=Nat.le_add_right ..), Array.append_nil]
state_before: a b : ByteArray
⊢ a.data ++ b.data ++ a.data.extract (a.data.size + b.data.size) a.data.size = a.data ++ b.data
state_after: no goals
Theorem: Int.units_inv_eq_self
File: Mathlib/Data/Int/Order/Units.lean

tactic: rw [inv_eq_iff_mul_eq_one, units_mul_self]
state_before: u : ℤˣ
⊢ u⁻¹ = u
state_after: no goals
Theorem: Specializes.zpow
File: Mathlib/Topology/Algebra/Group/Basic.lean

tactic: simpa using h.pow n
state_before: G✝ : Type w
H : Type x
α : Type u
β : Type v
inst✝⁶ : TopologicalSpace G✝
inst✝⁵ : Inv G✝
inst✝⁴ : ContinuousInv G✝
G : Type u_1
inst✝³ : DivInvMonoid G
inst✝² : TopologicalSpace G
inst✝¹ : ContinuousMul G
inst✝ : ContinuousInv G
x y : G
h : x ⤳ y
n : ℕ
⊢ (x ^ Int.ofNat n) ⤳ (y ^ Int.ofNat n)
state_after: no goals

tactic: simpa using (h.pow (n + 1)).inv
state_before: G✝ : Type w
H : Type x
α : Type u
β : Type v
inst✝⁶ : TopologicalSpace G✝
inst✝⁵ : Inv G✝
inst✝⁴ : ContinuousInv G✝
G : Type u_1
inst✝³ : DivInvMonoid G
inst✝² : TopologicalSpace G
inst✝¹ : ContinuousMul G
inst✝ : ContinuousInv G
x y : G
h : x ⤳ y
n : ℕ
⊢ (x ^ Int.negSucc n) ⤳ (y ^ Int.negSucc n)
state_after: no goals
Theorem: Stream'.drop_drop
File: Mathlib/Data/Stream/Init.lean

tactic: ext
state_before: α : Type u
β : Type v
δ : Type w
n m : ℕ
s : Stream' α
⊢ drop n (drop m s) = drop (n + m) s
state_after: case a
α : Type u
β : Type v
δ : Type w
n m : ℕ
s : Stream' α
n✝ : ℕ
⊢ (drop n (drop m s)).get n✝ = (drop (n + m) s).get n✝

tactic: simp [Nat.add_assoc]
state_before: case a
α : Type u
β : Type v
δ : Type w
n m : ℕ
s : Stream' α
n✝ : ℕ
⊢ (drop n (drop m s)).get n✝ = (drop (n + m) s).get n✝
state_after: no goals
Theorem: NNReal.coe_sub
File: Mathlib/Data/NNReal/Basic.lean

tactic: simp [show (r₂ : ℝ) ≤ r₁ from h]
state_before: r₁ r₂ : ℝ≥0
h : r₂ ≤ r₁
⊢ ↑r₂ ≤ ↑r₁ - 0
state_after: no goals
Theorem: Nat.sum_totient
File: Mathlib/Data/Nat/Totient.lean

tactic: rcases n.eq_zero_or_pos with (rfl | hn)
state_before: n : ℕ
⊢ n.divisors.sum φ = n
state_after: case inl

⊢ (divisors 0).sum φ = 0

case inr
n : ℕ
hn : n > 0
⊢ n.divisors.sum φ = n

tactic: rw [← sum_div_divisors n φ]
state_before: case inr
n : ℕ
hn : n > 0
⊢ n.divisors.sum φ = n
state_after: case inr
n : ℕ
hn : n > 0
⊢ ∑ d ∈ n.divisors, φ (n / d) = n

tactic: have : n = ∑ d ∈ n.divisors, (filter (fun k : ℕ => n.gcd k = d) (range n)).card := by
  nth_rw 1 [← card_range n]
  refine card_eq_sum_card_fiberwise fun x _ => mem_divisors.2 ⟨?_, hn.ne'⟩
  apply gcd_dvd_left
state_before: case inr
n : ℕ
hn : n > 0
⊢ ∑ d ∈ n.divisors, φ (n / d) = n
state_after: case inr
n : ℕ
hn : n > 0
this : n = ∑ d ∈ n.divisors, (filter (fun k => n.gcd k = d) (range n)).card
⊢ ∑ d ∈ n.divisors, φ (n / d) = n

tactic: nth_rw 3 [this]
state_before: case inr
n : ℕ
hn : n > 0
this : n = ∑ d ∈ n.divisors, (filter (fun k => n.gcd k = d) (range n)).card
⊢ ∑ d ∈ n.divisors, φ (n / d) = n
state_after: case inr
n : ℕ
hn : n > 0
this : n = ∑ d ∈ n.divisors, (filter (fun k => n.gcd k = d) (range n)).card
⊢ ∑ d ∈ n.divisors, φ (n / d) = ∑ d ∈ n.divisors, (filter (fun k => n.gcd k = d) (range n)).card

tactic: exact sum_congr rfl fun x hx => totient_div_of_dvd (dvd_of_mem_divisors hx)
state_before: case inr
n : ℕ
hn : n > 0
this : n = ∑ d ∈ n.divisors, (filter (fun k => n.gcd k = d) (range n)).card
⊢ ∑ d ∈ n.divisors, φ (n / d) = ∑ d ∈ n.divisors, (filter (fun k => n.gcd k = d) (range n)).card
state_after: no goals

tactic: simp
state_before: case inl

⊢ (divisors 0).sum φ = 0
state_after: no goals

tactic: nth_rw 1 [← card_range n]
state_before: n : ℕ
hn : n > 0
⊢ n = ∑ d ∈ n.divisors, (filter (fun k => n.gcd k = d) (range n)).card
state_after: n : ℕ
hn : n > 0
⊢ (range n).card = ∑ d ∈ n.divisors, (filter (fun k => n.gcd k = d) (range n)).card

tactic: refine card_eq_sum_card_fiberwise fun x _ => mem_divisors.2 ⟨?_, hn.ne'⟩
state_before: n : ℕ
hn : n > 0
⊢ (range n).card = ∑ d ∈ n.divisors, (filter (fun k => n.gcd k = d) (range n)).card
state_after: n : ℕ
hn : n > 0
x : ℕ
x✝ : x ∈ range n
⊢ n.gcd x ∣ n

tactic: apply gcd_dvd_left
state_before: n : ℕ
hn : n > 0
x : ℕ
x✝ : x ∈ range n
⊢ n.gcd x ∣ n
state_after: no goals
Theorem: Fin.succAbove_left_injective
File: Mathlib/Data/Fin/Basic.lean

tactic: simpa [range_succAbove] using congr_arg (fun f : Fin n → Fin (n + 1) => (Set.range f)ᶜ) h
state_before: n m : ℕ
p : Fin (n + 1)
i j : Fin n
x✝¹ x✝ : Fin (n + 1)
h : x✝¹.succAbove = x✝.succAbove
⊢ x✝¹ = x✝
state_after: no goals
Theorem: NNReal.sInf_empty
File: Mathlib/Data/NNReal/Basic.lean

tactic: rw [← coe_eq_zero, coe_sInf, Set.image_empty, Real.sInf_empty]
state_before: r r₁ r₂ : ℝ≥0
x y : ℝ
⊢ sInf ∅ = 0
state_after: no goals
Theorem: LinearMap.ker_ne_bot_of_finrank_lt
File: Mathlib/LinearAlgebra/FiniteDimensional.lean

tactic: have h₁ := f.finrank_range_add_finrank_ker
state_before: K : Type u
V : Type v
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
V₂ : Type v'
inst✝³ : AddCommGroup V₂
inst✝² : Module K V₂
inst✝¹ : FiniteDimensional K V
inst✝ : FiniteDimensional K V₂
f : V →ₗ[K] V₂
h : finrank K V₂ < finrank K V
⊢ ker f ≠ ⊥
state_after: K : Type u
V : Type v
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
V₂ : Type v'
inst✝³ : AddCommGroup V₂
inst✝² : Module K V₂
inst✝¹ : FiniteDimensional K V
inst✝ : FiniteDimensional K V₂
f : V →ₗ[K] V₂
h : finrank K V₂ < finrank K V
h₁ : finrank K ↥(range f) + finrank K ↥(ker f) = finrank K V
⊢ ker f ≠ ⊥

tactic: have h₂ : finrank K (LinearMap.range f) ≤ finrank K V₂ := (LinearMap.range f).finrank_le
state_before: K : Type u
V : Type v
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
V₂ : Type v'
inst✝³ : AddCommGroup V₂
inst✝² : Module K V₂
inst✝¹ : FiniteDimensional K V
inst✝ : FiniteDimensional K V₂
f : V →ₗ[K] V₂
h : finrank K V₂ < finrank K V
h₁ : finrank K ↥(range f) + finrank K ↥(ker f) = finrank K V
⊢ ker f ≠ ⊥
state_after: K : Type u
V : Type v
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
V₂ : Type v'
inst✝³ : AddCommGroup V₂
inst✝² : Module K V₂
inst✝¹ : FiniteDimensional K V
inst✝ : FiniteDimensional K V₂
f : V →ₗ[K] V₂
h : finrank K V₂ < finrank K V
h₁ : finrank K ↥(range f) + finrank K ↥(ker f) = finrank K V
h₂ : finrank K ↥(range f) ≤ finrank K V₂
⊢ ker f ≠ ⊥

tactic: suffices 0 < finrank K (LinearMap.ker f) from Submodule.one_le_finrank_iff.mp this
state_before: K : Type u
V : Type v
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
V₂ : Type v'
inst✝³ : AddCommGroup V₂
inst✝² : Module K V₂
inst✝¹ : FiniteDimensional K V
inst✝ : FiniteDimensional K V₂
f : V →ₗ[K] V₂
h : finrank K V₂ < finrank K V
h₁ : finrank K ↥(range f) + finrank K ↥(ker f) = finrank K V
h₂ : finrank K ↥(range f) ≤ finrank K V₂
⊢ ker f ≠ ⊥
state_after: K : Type u
V : Type v
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
V₂ : Type v'
inst✝³ : AddCommGroup V₂
inst✝² : Module K V₂
inst✝¹ : FiniteDimensional K V
inst✝ : FiniteDimensional K V₂
f : V →ₗ[K] V₂
h : finrank K V₂ < finrank K V
h₁ : finrank K ↥(range f) + finrank K ↥(ker f) = finrank K V
h₂ : finrank K ↥(range f) ≤ finrank K V₂
⊢ 0 < finrank K ↥(ker f)

tactic: omega
state_before: K : Type u
V : Type v
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
V₂ : Type v'
inst✝³ : AddCommGroup V₂
inst✝² : Module K V₂
inst✝¹ : FiniteDimensional K V
inst✝ : FiniteDimensional K V₂
f : V →ₗ[K] V₂
h : finrank K V₂ < finrank K V
h₁ : finrank K ↥(range f) + finrank K ↥(ker f) = finrank K V
h₂ : finrank K ↥(range f) ≤ finrank K V₂
⊢ 0 < finrank K ↥(ker f)
state_after: no goals
Theorem: Matroid.comap_emptyOn
File: Mathlib/Data/Matroid/Map.lean

tactic: simp [← ground_eq_empty_iff]
state_before: α : Type u_1
β : Type u_2
f✝ : α → β
E I s : Set α
M : Matroid α
N : Matroid β
f : α → β
⊢ (emptyOn β).comap f = emptyOn α
state_after: no goals
Theorem: orthogonalProjection_eq_linear_proj
File: Mathlib/Analysis/InnerProductSpace/Projection.lean

tactic: have : IsCompl K Kᗮ := Submodule.isCompl_orthogonal_of_completeSpace
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
x : E
⊢ (orthogonalProjection K) x = (K.linearProjOfIsCompl Kᗮ ⋯) x
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
x : E
this : IsCompl K Kᗮ
⊢ (orthogonalProjection K) x = (K.linearProjOfIsCompl Kᗮ ⋯) x

tactic: conv_lhs => rw [← Submodule.linear_proj_add_linearProjOfIsCompl_eq_self this x]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
x : E
this : IsCompl K Kᗮ
⊢ (orthogonalProjection K) x = (K.linearProjOfIsCompl Kᗮ ⋯) x
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
x : E
this : IsCompl K Kᗮ
⊢ (orthogonalProjection K) (↑((K.linearProjOfIsCompl Kᗮ this) x) + ↑((Kᗮ.linearProjOfIsCompl K ⋯) x)) =
    (K.linearProjOfIsCompl Kᗮ ⋯) x

tactic: rw [map_add, orthogonalProjection_mem_subspace_eq_self,
  orthogonalProjection_mem_subspace_orthogonalComplement_eq_zero (Submodule.coe_mem _), add_zero]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
x : E
this : IsCompl K Kᗮ
⊢ (orthogonalProjection K) (↑((K.linearProjOfIsCompl Kᗮ this) x) + ↑((Kᗮ.linearProjOfIsCompl K ⋯) x)) =
    (K.linearProjOfIsCompl Kᗮ ⋯) x
state_after: no goals
Theorem: LinearMap.splittingOfFunOnFintypeSurjective_splits
File: Mathlib/LinearAlgebra/Finsupp.lean

tactic: classical
refine pi_ext' fun x => ext_ring <| funext fun y => ?_
dsimp [splittingOfFunOnFintypeSurjective]
rw [linearEquivFunOnFinite_symm_single, Finsupp.sum_single_index, one_smul,
  (s (Finsupp.single x 1)).choose_spec, Finsupp.single_eq_pi_single]
rw [zero_smul]
state_before: R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
α : Type u_4
inst✝ : Finite α
f : M →ₗ[R] α → R
s : Surjective ⇑f
⊢ f ∘ₗ f.splittingOfFunOnFintypeSurjective s = id
state_after: no goals

tactic: refine pi_ext' fun x => ext_ring <| funext fun y => ?_
state_before: R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
α : Type u_4
inst✝ : Finite α
f : M →ₗ[R] α → R
s : Surjective ⇑f
⊢ f ∘ₗ f.splittingOfFunOnFintypeSurjective s = id
state_after: R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
α : Type u_4
inst✝ : Finite α
f : M →ₗ[R] α → R
s : Surjective ⇑f
x y : α
⊢ ((f ∘ₗ f.splittingOfFunOnFintypeSurjective s) ∘ₗ single x) 1 y = (id ∘ₗ single x) 1 y

tactic: dsimp [splittingOfFunOnFintypeSurjective]
state_before: R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
α : Type u_4
inst✝ : Finite α
f : M →ₗ[R] α → R
s : Surjective ⇑f
x y : α
⊢ ((f ∘ₗ f.splittingOfFunOnFintypeSurjective s) ∘ₗ single x) 1 y = (id ∘ₗ single x) 1 y
state_after: R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
α : Type u_4
inst✝ : Finite α
f : M →ₗ[R] α → R
s : Surjective ⇑f
x y : α
⊢ f (((linearEquivFunOnFinite R R α).symm (Pi.single x 1)).sum fun x r => r • ⋯.choose) y = Pi.single x 1 y

tactic: rw [linearEquivFunOnFinite_symm_single, Finsupp.sum_single_index, one_smul,
  (s (Finsupp.single x 1)).choose_spec, Finsupp.single_eq_pi_single]
state_before: R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
α : Type u_4
inst✝ : Finite α
f : M →ₗ[R] α → R
s : Surjective ⇑f
x y : α
⊢ f (((linearEquivFunOnFinite R R α).symm (Pi.single x 1)).sum fun x r => r • ⋯.choose) y = Pi.single x 1 y
state_after: R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
α : Type u_4
inst✝ : Finite α
f : M →ₗ[R] α → R
s : Surjective ⇑f
x y : α
⊢ 0 • ⋯.choose = 0

tactic: rw [zero_smul]
state_before: R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
α : Type u_4
inst✝ : Finite α
f : M →ₗ[R] α → R
s : Surjective ⇑f
x y : α
⊢ 0 • ⋯.choose = 0
state_after: no goals
Theorem: div_le_iff_le_mul
File: Mathlib/Algebra/Order/Group/Defs.lean

tactic: rw [← mul_le_mul_iff_right c, div_eq_mul_inv, inv_mul_cancel_right]
state_before: α : Type u
inst✝² : Group α
inst✝¹ : LE α
inst✝ : CovariantClass α α (swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a b c d : α
⊢ a / c ≤ b ↔ a ≤ b * c
state_after: no goals
Theorem: MvPolynomial.isWeightedHomogeneous_X
File: Mathlib/RingTheory/MvPolynomial/WeightedHomogeneous.lean

tactic: apply isWeightedHomogeneous_monomial
state_before: R : Type u_1
M : Type u_2
inst✝¹ : CommSemiring R
σ : Type u_3
inst✝ : AddCommMonoid M
w : σ → M
i : σ
⊢ IsWeightedHomogeneous w (X i) (w i)
state_after: case hm
R : Type u_1
M : Type u_2
inst✝¹ : CommSemiring R
σ : Type u_3
inst✝ : AddCommMonoid M
w : σ → M
i : σ
⊢ (weightedDegree w) (Finsupp.single i 1) = w i

tactic: simp only [weightedDegree, LinearMap.toAddMonoidHom_coe, total_single, one_nsmul]
state_before: case hm
R : Type u_1
M : Type u_2
inst✝¹ : CommSemiring R
σ : Type u_3
inst✝ : AddCommMonoid M
w : σ → M
i : σ
⊢ (weightedDegree w) (Finsupp.single i 1) = w i
state_after: no goals
Theorem: MvPolynomial.bind₁_X_left
File: Mathlib/Algebra/MvPolynomial/Monad.lean

tactic: ext1 i
state_before: σ : Type u_1
τ : Type u_2
R : Type u_3
S : Type u_4
T : Type u_5
inst✝² : CommSemiring R
inst✝¹ : CommSemiring S
inst✝ : CommSemiring T
⊢ bind₁ X = AlgHom.id R (MvPolynomial σ R)
state_after: case hf
σ : Type u_1
τ : Type u_2
R : Type u_3
S : Type u_4
T : Type u_5
inst✝² : CommSemiring R
inst✝¹ : CommSemiring S
inst✝ : CommSemiring T
i : σ
⊢ (bind₁ X) (X i) = (AlgHom.id R (MvPolynomial σ R)) (X i)

tactic: simp
state_before: case hf
σ : Type u_1
τ : Type u_2
R : Type u_3
S : Type u_4
T : Type u_5
inst✝² : CommSemiring R
inst✝¹ : CommSemiring S
inst✝ : CommSemiring T
i : σ
⊢ (bind₁ X) (X i) = (AlgHom.id R (MvPolynomial σ R)) (X i)
state_after: no goals
Theorem: SymplecticGroup.mem_iff'
File: Mathlib/LinearAlgebra/SymplecticGroup.lean

tactic: rw [← transpose_mem_iff, mem_iff, transpose_transpose]
state_before: l : Type u_1
R : Type u_2
inst✝² : DecidableEq l
inst✝¹ : Fintype l
inst✝ : CommRing R
A : Matrix (l ⊕ l) (l ⊕ l) R
⊢ A ∈ symplecticGroup l R ↔ Aᵀ * J l R * A = J l R
state_after: no goals
Theorem: coe_lowerClosure
File: Mathlib/Order/UpperLower/Basic.lean

tactic: ext
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
κ : ι → Sort u_5
inst✝¹ : Preorder α
inst✝ : Preorder β
s✝ t : Set α
x : α
s : Set α
⊢ ↑(lowerClosure s) = ⋃ a ∈ s, Iic a
state_after: case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
κ : ι → Sort u_5
inst✝¹ : Preorder α
inst✝ : Preorder β
s✝ t : Set α
x : α
s : Set α
x✝ : α
⊢ x✝ ∈ ↑(lowerClosure s) ↔ x✝ ∈ ⋃ a ∈ s, Iic a

tactic: simp
state_before: case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
κ : ι → Sort u_5
inst✝¹ : Preorder α
inst✝ : Preorder β
s✝ t : Set α
x : α
s : Set α
x✝ : α
⊢ x✝ ∈ ↑(lowerClosure s) ↔ x✝ ∈ ⋃ a ∈ s, Iic a
state_after: no goals