1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: balanced_ball_zero
File: Mathlib/Analysis/Seminorm.lean

tactic: rw [← ball_normSeminorm 𝕜]
state_before: R : Type u_1
R' : Type u_2
𝕜 : Type u_3
𝕜₂ : Type u_4
𝕜₃ : Type u_5
𝕝 : Type u_6
E : Type u_7
E₂ : Type u_8
E₃ : Type u_9
F : Type u_10
G : Type u_11
ι : Type u_12
inst✝² : NormedField 𝕜
inst✝¹ : SeminormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
r : ℝ
x : E
⊢ Balanced 𝕜 (Metric.ball 0 r)
state_after: R : Type u_1
R' : Type u_2
𝕜 : Type u_3
𝕜₂ : Type u_4
𝕜₃ : Type u_5
𝕝 : Type u_6
E : Type u_7
E₂ : Type u_8
E₃ : Type u_9
F : Type u_10
G : Type u_11
ι : Type u_12
inst✝² : NormedField 𝕜
inst✝¹ : SeminormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
r : ℝ
x : E
⊢ Balanced 𝕜 ((normSeminorm 𝕜 E).ball 0 r)

tactic: exact (normSeminorm _ _).balanced_ball_zero r
state_before: R : Type u_1
R' : Type u_2
𝕜 : Type u_3
𝕜₂ : Type u_4
𝕜₃ : Type u_5
𝕝 : Type u_6
E : Type u_7
E₂ : Type u_8
E₃ : Type u_9
F : Type u_10
G : Type u_11
ι : Type u_12
inst✝² : NormedField 𝕜
inst✝¹ : SeminormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
r : ℝ
x : E
⊢ Balanced 𝕜 ((normSeminorm 𝕜 E).ball 0 r)
state_after: no goals
Theorem: List.prod_map_neg
File: Mathlib/Algebra/BigOperators/Ring/List.lean

tactic: induction l <;> simp [*, pow_succ, ((Commute.neg_one_left _).pow_left _).left_comm]
state_before: ι : Type u_1
κ : Type u_2
M : Type u_3
M₀ : Type u_4
R : Type u_5
inst✝¹ : CommMonoid M
inst✝ : HasDistribNeg M
l : List M
⊢ (map Neg.neg l).prod = (-1) ^ l.length * l.prod
state_after: no goals
Theorem: FractionalIdeal.spanSingleton_inv_mul
File: Mathlib/RingTheory/DedekindDomain/Ideal.lean

tactic: rw [mul_comm, spanSingleton_mul_inv K hx]
state_before: R : Type u_1
A : Type u_2
K : Type u_3
inst✝⁹ : CommRing R
inst✝⁸ : CommRing A
inst✝⁷ : Field K
R₁ : Type u_4
inst✝⁶ : CommRing R₁
inst✝⁵ : IsDomain R₁
inst✝⁴ : Algebra R₁ K
inst✝³ : IsFractionRing R₁ K
I J : FractionalIdeal R₁⁰ K
K' : Type u_5
inst✝² : Field K'
inst✝¹ : Algebra R₁ K'
inst✝ : IsFractionRing R₁ K'
x : K
hx : x ≠ 0
⊢ (spanSingleton R₁⁰ x)⁻¹ * spanSingleton R₁⁰ x = 1
state_after: no goals
Theorem: LieModule.commute_toEnd_of_mem_center_left
File: Mathlib/Algebra/Lie/Abelian.lean

tactic: rw [Commute.symm_iff, commute_iff_lie_eq, ← LieHom.map_lie, hx y, LieHom.map_zero]
state_before: R : Type u
L : Type v
M : Type w
N : Type w₁
inst✝¹⁰ : CommRing R
inst✝⁹ : LieRing L
inst✝⁸ : LieAlgebra R L
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
inst✝⁵ : LieRingModule L M
inst✝⁴ : LieModule R L M
inst✝³ : AddCommGroup N
inst✝² : Module R N
inst✝¹ : LieRingModule L N
inst✝ : LieModule R L N
x : L
hx : x ∈ LieAlgebra.center R L
y : L
⊢ Commute ((toEnd R L M) x) ((toEnd R L M) y)
state_after: no goals
Theorem: div_le_div_iff
File: Mathlib/Algebra/Order/Field/Basic.lean

tactic: rw [le_div_iff d0, div_mul_eq_mul_div, div_le_iff b0]
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
b0 : 0 < b
d0 : 0 < d
⊢ a / b ≤ c / d ↔ a * d ≤ c * b
state_after: no goals
Theorem: Orientation.oangle_sign_smul_sub_left
File: Mathlib/Geometry/Euclidean/Angle/Oriented/Basic.lean

tactic: rw [← oangle_sign_neg_left, sub_eq_neg_add, oangle_sign_add_smul_left]
state_before: V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x y : V
r : ℝ
⊢ (o.oangle (r • y - x) y).sign = -(o.oangle x y).sign
state_after: no goals
Theorem: Complex.arg_neg_coe_angle
File: Mathlib/Analysis/SpecialFunctions/Complex/Arg.lean

tactic: rcases lt_trichotomy x.im 0 with (hi | hi | hi)
state_before: a x✝ z x : ℂ
hx : x ≠ 0
⊢ ↑(-x).arg = ↑x.arg + ↑π
state_after: case inl
a x✝ z x : ℂ
hx : x ≠ 0
hi : x.im < 0
⊢ ↑(-x).arg = ↑x.arg + ↑π

case inr.inl
a x✝ z x : ℂ
hx : x ≠ 0
hi : x.im = 0
⊢ ↑(-x).arg = ↑x.arg + ↑π

case inr.inr
a x✝ z x : ℂ
hx : x ≠ 0
hi : 0 < x.im
⊢ ↑(-x).arg = ↑x.arg + ↑π

tactic: rw [arg_neg_eq_arg_add_pi_of_im_neg hi, Real.Angle.coe_add]
state_before: case inl
a x✝ z x : ℂ
hx : x ≠ 0
hi : x.im < 0
⊢ ↑(-x).arg = ↑x.arg + ↑π
state_after: no goals

tactic: rw [(ext rfl hi : x = x.re)]
state_before: case inr.inl
a x✝ z x : ℂ
hx : x ≠ 0
hi : x.im = 0
⊢ ↑(-x).arg = ↑x.arg + ↑π
state_after: case inr.inl
a x✝ z x : ℂ
hx : x ≠ 0
hi : x.im = 0
⊢ ↑(-↑x.re).arg = ↑(↑x.re).arg + ↑π

tactic: rcases lt_trichotomy x.re 0 with (hr | hr | hr)
state_before: case inr.inl
a x✝ z x : ℂ
hx : x ≠ 0
hi : x.im = 0
⊢ ↑(-↑x.re).arg = ↑(↑x.re).arg + ↑π
state_after: case inr.inl.inl
a x✝ z x : ℂ
hx : x ≠ 0
hi : x.im = 0
hr : x.re < 0
⊢ ↑(-↑x.re).arg = ↑(↑x.re).arg + ↑π

case inr.inl.inr.inl
a x✝ z x : ℂ
hx : x ≠ 0
hi : x.im = 0
hr : x.re = 0
⊢ ↑(-↑x.re).arg = ↑(↑x.re).arg + ↑π

case inr.inl.inr.inr
a x✝ z x : ℂ
hx : x ≠ 0
hi : x.im = 0
hr : 0 < x.re
⊢ ↑(-↑x.re).arg = ↑(↑x.re).arg + ↑π

tactic: rw [arg_ofReal_of_neg hr, ← ofReal_neg, arg_ofReal_of_nonneg (Left.neg_pos_iff.2 hr).le, ←
  Real.Angle.coe_add, ← two_mul, Real.Angle.coe_two_pi, Real.Angle.coe_zero]
state_before: case inr.inl.inl
a x✝ z x : ℂ
hx : x ≠ 0
hi : x.im = 0
hr : x.re < 0
⊢ ↑(-↑x.re).arg = ↑(↑x.re).arg + ↑π
state_after: no goals

tactic: exact False.elim (hx (ext hr hi))
state_before: case inr.inl.inr.inl
a x✝ z x : ℂ
hx : x ≠ 0
hi : x.im = 0
hr : x.re = 0
⊢ ↑(-↑x.re).arg = ↑(↑x.re).arg + ↑π
state_after: no goals

tactic: rw [arg_ofReal_of_nonneg hr.le, ← ofReal_neg, arg_ofReal_of_neg (Left.neg_neg_iff.2 hr),
  Real.Angle.coe_zero, zero_add]
state_before: case inr.inl.inr.inr
a x✝ z x : ℂ
hx : x ≠ 0
hi : x.im = 0
hr : 0 < x.re
⊢ ↑(-↑x.re).arg = ↑(↑x.re).arg + ↑π
state_after: no goals

tactic: rw [arg_neg_eq_arg_sub_pi_of_im_pos hi, Real.Angle.coe_sub, Real.Angle.sub_coe_pi_eq_add_coe_pi]
state_before: case inr.inr
a x✝ z x : ℂ
hx : x ≠ 0
hi : 0 < x.im
⊢ ↑(-x).arg = ↑x.arg + ↑π
state_after: no goals
Theorem: FreeAbelianGroup.toFinsupp_of
File: Mathlib/GroupTheory/FreeAbelianGroupFinsupp.lean

tactic: simp only [toFinsupp, lift.of]
state_before: X : Type u_1
x : X
⊢ toFinsupp (of x) = single x 1
state_after: no goals
Theorem: padicNorm.padicNorm_of_prime_of_ne
File: Mathlib/NumberTheory/Padics/PadicNorm.lean

tactic: have p : padicValRat p q = 0 := mod_cast padicValNat_primes neq
state_before: p q : ℕ
p_prime : Fact (Nat.Prime p)
q_prime : Fact (Nat.Prime q)
neq : p ≠ q
⊢ padicNorm p ↑q = 1
state_after: p✝ q : ℕ
p_prime : Fact (Nat.Prime p✝)
q_prime : Fact (Nat.Prime q)
neq : p✝ ≠ q
p : padicValRat p✝ ↑q = 0
⊢ padicNorm p✝ ↑q = 1

tactic: rw [padicNorm, p]
state_before: p✝ q : ℕ
p_prime : Fact (Nat.Prime p✝)
q_prime : Fact (Nat.Prime q)
neq : p✝ ≠ q
p : padicValRat p✝ ↑q = 0
⊢ padicNorm p✝ ↑q = 1
state_after: p✝ q : ℕ
p_prime : Fact (Nat.Prime p✝)
q_prime : Fact (Nat.Prime q)
neq : p✝ ≠ q
p : padicValRat p✝ ↑q = 0
⊢ (if ↑q = 0 then 0 else ↑p✝ ^ (-0)) = 1

tactic: simp [q_prime.1.ne_zero]
state_before: p✝ q : ℕ
p_prime : Fact (Nat.Prime p✝)
q_prime : Fact (Nat.Prime q)
neq : p✝ ≠ q
p : padicValRat p✝ ↑q = 0
⊢ (if ↑q = 0 then 0 else ↑p✝ ^ (-0)) = 1
state_after: no goals
Theorem: hasLineDerivAt_smul_iff
File: Mathlib/Analysis/Calculus/LineDeriv/Basic.lean

tactic: simpa [smul_smul, inv_mul_cancel hc] using h.smul (c ⁻¹)
state_before: 𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
f : E → F
s : Set E
x v : E
f' : F
c : 𝕜
hc : c ≠ 0
h : HasLineDerivAt 𝕜 f (c • f') x (c • v)
⊢ HasLineDerivAt 𝕜 f f' x v
state_after: no goals
Theorem: ZNum.add_zero
File: Mathlib/Data/Num/Lemmas.lean

tactic: cases n <;> rfl
state_before: α : Type u_1
n : ZNum
⊢ n + 0 = n
state_after: no goals
Theorem: CategoryTheory.PreGaloisCategory.card_hom_le_card_fiber_of_connected
File: Mathlib/CategoryTheory/Galois/Basic.lean

tactic: apply Nat.card_le_card_of_injective
state_before: C : Type u₁
inst✝³ : Category.{u₂, u₁} C
inst✝² : PreGaloisCategory C
F : C ⥤ FintypeCat
inst✝¹ : FiberFunctor F
A X : C
inst✝ : IsConnected A
⊢ Nat.card (A ⟶ X) ≤ Nat.card ↑(F.obj X)
state_after: case hf
C : Type u₁
inst✝³ : Category.{u₂, u₁} C
inst✝² : PreGaloisCategory C
F : C ⥤ FintypeCat
inst✝¹ : FiberFunctor F
A X : C
inst✝ : IsConnected A
⊢ Function.Injective ?f

case f
C : Type u₁
inst✝³ : Category.{u₂, u₁} C
inst✝² : PreGaloisCategory C
F : C ⥤ FintypeCat
inst✝¹ : FiberFunctor F
A X : C
inst✝ : IsConnected A
⊢ (A ⟶ X) → ↑(F.obj X)

tactic: exact evaluation_injective_of_isConnected F A X (Classical.arbitrary _)
state_before: case hf
C : Type u₁
inst✝³ : Category.{u₂, u₁} C
inst✝² : PreGaloisCategory C
F : C ⥤ FintypeCat
inst✝¹ : FiberFunctor F
A X : C
inst✝ : IsConnected A
⊢ Function.Injective ?f

case f
C : Type u₁
inst✝³ : Category.{u₂, u₁} C
inst✝² : PreGaloisCategory C
F : C ⥤ FintypeCat
inst✝¹ : FiberFunctor F
A X : C
inst✝ : IsConnected A
⊢ (A ⟶ X) → ↑(F.obj X)
state_after: no goals
Theorem: Submodule.span_neg
File: Mathlib/LinearAlgebra/Span.lean

tactic: simp
state_before: R : Type u_1
R₂ : Type u_2
K : Type u_3
M : Type u_4
M₂ : Type u_5
V : Type u_6
S : Type u_7
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
s : Set M
⊢ span R (-s) = span R (⇑(-LinearMap.id) '' s)
state_after: no goals

tactic: simp
state_before: R : Type u_1
R₂ : Type u_2
K : Type u_3
M : Type u_4
M₂ : Type u_5
V : Type u_6
S : Type u_7
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
s : Set M
⊢ map (-LinearMap.id) (span R s) = span R s
state_after: no goals
Theorem: CategoryTheory.MonoidalCategory.whisker_exchange
File: Mathlib/CategoryTheory/Monoidal/Category.lean

tactic: simp only [← id_tensorHom, ← tensorHom_id, ← tensor_comp, id_comp, comp_id]
state_before: C : Type u
𝒞 : Category.{v, u} C
inst✝ : MonoidalCategory C
W X Y Z : C
f : W ⟶ X
g : Y ⟶ Z
⊢ W ◁ g ≫ f ▷ Z = f ▷ Y ≫ X ◁ g
state_after: no goals
Theorem: WeierstrassCurve.baseChange_preΨ₄
File: Mathlib/AlgebraicGeometry/EllipticCurve/DivisionPolynomial/Basic.lean

tactic: rw [← map_preΨ₄, map_baseChange]
state_before: R : Type r
S : Type s
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing S
W : WeierstrassCurve R
inst✝⁸ : Algebra R S
A : Type u
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
inst✝⁵ : Algebra S A
inst✝⁴ : IsScalarTower R S A
B : Type v
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra S B
inst✝ : IsScalarTower R S B
f : A →ₐ[S] B
⊢ (W.baseChange B).preΨ₄ = Polynomial.map (↑f) (W.baseChange A).preΨ₄
state_after: no goals
Theorem: SimpleGraph.Walk.subset_support_append_right
File: Mathlib/Combinatorics/SimpleGraph/Connectivity.lean

tactic: intro h
state_before: V✝ : Type u
V' : Type v
V'' : Type w
G✝ : SimpleGraph V✝
G' : SimpleGraph V'
G'' : SimpleGraph V''
V : Type u
G : SimpleGraph V
u v w : V
p : G.Walk u v
q : G.Walk v w
⊢ q.support ⊆ (p.append q).support
state_after: V✝ : Type u
V' : Type v
V'' : Type w
G✝ : SimpleGraph V✝
G' : SimpleGraph V'
G'' : SimpleGraph V''
V : Type u
G : SimpleGraph V
u v w : V
p : G.Walk u v
q : G.Walk v w
h : V
⊢ h ∈ q.support → h ∈ (p.append q).support

tactic: simp (config := { contextual := true }) only [mem_support_append_iff, or_true_iff, imp_true_iff]
state_before: V✝ : Type u
V' : Type v
V'' : Type w
G✝ : SimpleGraph V✝
G' : SimpleGraph V'
G'' : SimpleGraph V''
V : Type u
G : SimpleGraph V
u v w : V
p : G.Walk u v
q : G.Walk v w
h : V
⊢ h ∈ q.support → h ∈ (p.append q).support
state_after: no goals
Theorem: Cardinal.mk_quaternionAlgebra
File: Mathlib/Algebra/Quaternion.lean

tactic: rw [mk_congr (QuaternionAlgebra.equivProd c₁ c₂)]
state_before: R : Type u_1
c₁ c₂ : R
⊢ #ℍ[R,c₁,c₂] = #R ^ 4
state_after: R : Type u_1
c₁ c₂ : R
⊢ #(R × R × R × R) = #R ^ 4

tactic: simp only [mk_prod, lift_id]
state_before: R : Type u_1
c₁ c₂ : R
⊢ #(R × R × R × R) = #R ^ 4
state_after: R : Type u_1
c₁ c₂ : R
⊢ #R * (#R * (#R * #R)) = #R ^ 4

tactic: ring
state_before: R : Type u_1
c₁ c₂ : R
⊢ #R * (#R * (#R * #R)) = #R ^ 4
state_after: no goals
Theorem: joinedIn_iff_joined
File: Mathlib/Topology/Connected/PathConnected.lean

tactic: simp
state_before: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
x_in : x ∈ F
y_in : y ∈ F
h : Joined ⟨x, x_in⟩ ⟨y, y_in⟩
⊢ ∀ (t : ↑I), (h.somePath.map ⋯) t ∈ F
state_after: no goals
Theorem: Nat.four_dvd_or_exists_odd_prime_and_dvd_of_two_lt
File: Mathlib/Data/Nat/Factors.lean

tactic: obtain ⟨_ | _ | k, rfl⟩ | ⟨p, hp, hdvd, hodd⟩ := n.eq_two_pow_or_exists_odd_prime_and_dvd
state_before: n : ℕ
n2 : 2 < n
⊢ 4 ∣ n ∨ ∃ p, Prime p ∧ p ∣ n ∧ Odd p
state_after: case inl.intro.zero
n2 : 2 < 2 ^ 0
⊢ 4 ∣ 2 ^ 0 ∨ ∃ p, Prime p ∧ p ∣ 2 ^ 0 ∧ Odd p

case inl.intro.succ.zero
n2 : 2 < 2 ^ (0 + 1)
⊢ 4 ∣ 2 ^ (0 + 1) ∨ ∃ p, Prime p ∧ p ∣ 2 ^ (0 + 1) ∧ Odd p

case inl.intro.succ.succ
k : ℕ
n2 : 2 < 2 ^ (k + 1 + 1)
⊢ 4 ∣ 2 ^ (k + 1 + 1) ∨ ∃ p, Prime p ∧ p ∣ 2 ^ (k + 1 + 1) ∧ Odd p

case inr.intro.intro.intro
n : ℕ
n2 : 2 < n
p : ℕ
hp : Prime p
hdvd : p ∣ n
hodd : Odd p
⊢ 4 ∣ n ∨ ∃ p, Prime p ∧ p ∣ n ∧ Odd p

tactic: contradiction
state_before: case inl.intro.zero
n2 : 2 < 2 ^ 0
⊢ 4 ∣ 2 ^ 0 ∨ ∃ p, Prime p ∧ p ∣ 2 ^ 0 ∧ Odd p
state_after: no goals

tactic: contradiction
state_before: case inl.intro.succ.zero
n2 : 2 < 2 ^ (0 + 1)
⊢ 4 ∣ 2 ^ (0 + 1) ∨ ∃ p, Prime p ∧ p ∣ 2 ^ (0 + 1) ∧ Odd p
state_after: no goals

tactic: simp [Nat.pow_succ, mul_assoc]
state_before: case inl.intro.succ.succ
k : ℕ
n2 : 2 < 2 ^ (k + 1 + 1)
⊢ 4 ∣ 2 ^ (k + 1 + 1) ∨ ∃ p, Prime p ∧ p ∣ 2 ^ (k + 1 + 1) ∧ Odd p
state_after: no goals

tactic: exact Or.inr ⟨p, hp, hdvd, hodd⟩
state_before: case inr.intro.intro.intro
n : ℕ
n2 : 2 < n
p : ℕ
hp : Prime p
hdvd : p ∣ n
hodd : Odd p
⊢ 4 ∣ n ∨ ∃ p, Prime p ∧ p ∣ n ∧ Odd p
state_after: no goals
Theorem: Module.forall_dual_apply_eq_zero_iff
File: Mathlib/LinearAlgebra/Dual.lean

tactic: rw [← eval_apply_eq_zero_iff K v, LinearMap.ext_iff]
state_before: K : Type uK
V : Type uV
inst✝³ : CommRing K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Free K V
v : V
⊢ (∀ (φ : Dual K V), φ v = 0) ↔ v = 0
state_after: K : Type uK
V : Type uV
inst✝³ : CommRing K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Free K V
v : V
⊢ (∀ (φ : Dual K V), φ v = 0) ↔ ∀ (x : Dual K V), ((eval K V) v) x = 0 x

tactic: rfl
state_before: K : Type uK
V : Type uV
inst✝³ : CommRing K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Free K V
v : V
⊢ (∀ (φ : Dual K V), φ v = 0) ↔ ∀ (x : Dual K V), ((eval K V) v) x = 0 x
state_after: no goals
Theorem: ONote.fastGrowing_zero'
File: Mathlib/SetTheory/Ordinal/Notation.lean

tactic: rw [fastGrowing_def h]
state_before: o : ONote
h : o.fundamentalSequence = Sum.inl none
⊢ o.fastGrowing = Nat.succ
state_after: no goals
Theorem: List.get?_enumFrom
File: Mathlib/Data/List/Enum.lean

tactic: simp
state_before: α : Type u_1
β : Type u_2
n : ℕ
l : List α
m : ℕ
⊢ (enumFrom n l).get? m = Option.map (fun a => (n + m, a)) (l.get? m)
state_after: no goals
Theorem: Matrix.blockDiagonal'_apply
File: Mathlib/Data/Matrix/Block.lean

tactic: cases ik
state_before: l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
p : Type u_5
q : Type u_6
m' : o → Type u_7
n' : o → Type u_8
p' : o → Type u_9
R : Type u_10
S : Type u_11
α : Type u_12
β : Type u_13
inst✝² : DecidableEq o
inst✝¹ : Zero α
inst✝ : Zero β
M : (i : o) → Matrix (m' i) (n' i) α
ik : (i : o) × m' i
jk : (i : o) × n' i
⊢ blockDiagonal' M ik jk = if h : ik.fst = jk.fst then M ik.fst ik.snd (cast ⋯ jk.snd) else 0
state_after: case mk
l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
p : Type u_5
q : Type u_6
m' : o → Type u_7
n' : o → Type u_8
p' : o → Type u_9
R : Type u_10
S : Type u_11
α : Type u_12
β : Type u_13
inst✝² : DecidableEq o
inst✝¹ : Zero α
inst✝ : Zero β
M : (i : o) → Matrix (m' i) (n' i) α
jk : (i : o) × n' i
fst✝ : o
snd✝ : m' fst✝
⊢ blockDiagonal' M ⟨fst✝, snd✝⟩ jk =
    if h : ⟨fst✝, snd✝⟩.fst = jk.fst then M ⟨fst✝, snd✝⟩.fst ⟨fst✝, snd✝⟩.snd (cast ⋯ jk.snd) else 0

tactic: cases jk
state_before: case mk
l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
p : Type u_5
q : Type u_6
m' : o → Type u_7
n' : o → Type u_8
p' : o → Type u_9
R : Type u_10
S : Type u_11
α : Type u_12
β : Type u_13
inst✝² : DecidableEq o
inst✝¹ : Zero α
inst✝ : Zero β
M : (i : o) → Matrix (m' i) (n' i) α
jk : (i : o) × n' i
fst✝ : o
snd✝ : m' fst✝
⊢ blockDiagonal' M ⟨fst✝, snd✝⟩ jk =
    if h : ⟨fst✝, snd✝⟩.fst = jk.fst then M ⟨fst✝, snd✝⟩.fst ⟨fst✝, snd✝⟩.snd (cast ⋯ jk.snd) else 0
state_after: case mk.mk
l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
p : Type u_5
q : Type u_6
m' : o → Type u_7
n' : o → Type u_8
p' : o → Type u_9
R : Type u_10
S : Type u_11
α : Type u_12
β : Type u_13
inst✝² : DecidableEq o
inst✝¹ : Zero α
inst✝ : Zero β
M : (i : o) → Matrix (m' i) (n' i) α
fst✝¹ : o
snd✝¹ : m' fst✝¹
fst✝ : o
snd✝ : n' fst✝
⊢ blockDiagonal' M ⟨fst✝¹, snd✝¹⟩ ⟨fst✝, snd✝⟩ =
    if h : ⟨fst✝¹, snd✝¹⟩.fst = ⟨fst✝, snd✝⟩.fst then M ⟨fst✝¹, snd✝¹⟩.fst ⟨fst✝¹, snd✝¹⟩.snd (cast ⋯ ⟨fst✝, snd✝⟩.snd)
    else 0

tactic: rfl
state_before: case mk.mk
l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
p : Type u_5
q : Type u_6
m' : o → Type u_7
n' : o → Type u_8
p' : o → Type u_9
R : Type u_10
S : Type u_11
α : Type u_12
β : Type u_13
inst✝² : DecidableEq o
inst✝¹ : Zero α
inst✝ : Zero β
M : (i : o) → Matrix (m' i) (n' i) α
fst✝¹ : o
snd✝¹ : m' fst✝¹
fst✝ : o
snd✝ : n' fst✝
⊢ blockDiagonal' M ⟨fst✝¹, snd✝¹⟩ ⟨fst✝, snd✝⟩ =
    if h : ⟨fst✝¹, snd✝¹⟩.fst = ⟨fst✝, snd✝⟩.fst then M ⟨fst✝¹, snd✝¹⟩.fst ⟨fst✝¹, snd✝¹⟩.snd (cast ⋯ ⟨fst✝, snd✝⟩.snd)
    else 0
state_after: no goals
Theorem: List.rotate'_nil
File: Mathlib/Data/List/Rotate.lean

tactic: cases n <;> rfl
state_before: α : Type u
n : ℕ
⊢ [].rotate' n = []
state_after: no goals
Theorem: Subgroup.rank_le_index_mul_rank
File: Mathlib/GroupTheory/Schreier.lean

tactic: haveI := H.fg_of_index_ne_zero
state_before: G : Type u_1
inst✝¹ : Group G
H : Subgroup G
R S : Set G
hG : Group.FG G
inst✝ : H.FiniteIndex
⊢ Group.rank ↥H ≤ H.index * Group.rank G
state_after: G : Type u_1
inst✝¹ : Group G
H : Subgroup G
R S : Set G
hG : Group.FG G
inst✝ : H.FiniteIndex
this : Group.FG ↥H
⊢ Group.rank ↥H ≤ H.index * Group.rank G

tactic: obtain ⟨S, hS₀, hS⟩ := Group.rank_spec G
state_before: G : Type u_1
inst✝¹ : Group G
H : Subgroup G
R S : Set G
hG : Group.FG G
inst✝ : H.FiniteIndex
this : Group.FG ↥H
⊢ Group.rank ↥H ≤ H.index * Group.rank G
state_after: case intro.intro
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
R S✝ : Set G
hG : Group.FG G
inst✝ : H.FiniteIndex
this : Group.FG ↥H
S : Finset G
hS₀ : S.card = Group.rank G
hS : closure ↑S = ⊤
⊢ Group.rank ↥H ≤ H.index * Group.rank G

tactic: obtain ⟨T, hT₀, hT⟩ := exists_finset_card_le_mul H hS
state_before: case intro.intro
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
R S✝ : Set G
hG : Group.FG G
inst✝ : H.FiniteIndex
this : Group.FG ↥H
S : Finset G
hS₀ : S.card = Group.rank G
hS : closure ↑S = ⊤
⊢ Group.rank ↥H ≤ H.index * Group.rank G
state_after: case intro.intro.intro.intro
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
R S✝ : Set G
hG : Group.FG G
inst✝ : H.FiniteIndex
this : Group.FG ↥H
S : Finset G
hS₀ : S.card = Group.rank G
hS : closure ↑S = ⊤
T : Finset ↥H
hT₀ : T.card ≤ H.index * S.card
hT : closure ↑T = ⊤
⊢ Group.rank ↥H ≤ H.index * Group.rank G
Theorem: Set.zero_smul_set
File: Mathlib/Data/Set/Pointwise/SMul.lean

tactic: simp only [← image_smul, image_eta, zero_smul, h.image_const, singleton_zero]
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝² : Zero α
inst✝¹ : Zero β
inst✝ : SMulWithZero α β
s✝ : Set α
t s : Set β
h : s.Nonempty
⊢ 0 • s = 0
state_after: no goals
Theorem: ContinuousAffineMap.to_affineMap_injective
File: Mathlib/Topology/Algebra/ContinuousAffineMap.lean

tactic: cases f
state_before: R : Type u_1
V : Type u_2
W : Type u_3
P : Type u_4
Q : Type u_5
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup V
inst✝⁶ : Module R V
inst✝⁵ : TopologicalSpace P
inst✝⁴ : AddTorsor V P
inst✝³ : AddCommGroup W
inst✝² : Module R W
inst✝¹ : TopologicalSpace Q
inst✝ : AddTorsor W Q
f g : P →ᴬ[R] Q
h : f.toAffineMap = g.toAffineMap
⊢ f = g
state_after: case mk
R : Type u_1
V : Type u_2
W : Type u_3
P : Type u_4
Q : Type u_5
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup V
inst✝⁶ : Module R V
inst✝⁵ : TopologicalSpace P
inst✝⁴ : AddTorsor V P
inst✝³ : AddCommGroup W
inst✝² : Module R W
inst✝¹ : TopologicalSpace Q
inst✝ : AddTorsor W Q
g : P →ᴬ[R] Q
toAffineMap✝ : P →ᵃ[R] Q
cont✝ : Continuous toAffineMap✝.toFun
h : { toAffineMap := toAffineMap✝, cont := cont✝ }.toAffineMap = g.toAffineMap
⊢ { toAffineMap := toAffineMap✝, cont := cont✝ } = g

tactic: cases g
state_before: case mk
R : Type u_1
V : Type u_2
W : Type u_3
P : Type u_4
Q : Type u_5
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup V
inst✝⁶ : Module R V
inst✝⁵ : TopologicalSpace P
inst✝⁴ : AddTorsor V P
inst✝³ : AddCommGroup W
inst✝² : Module R W
inst✝¹ : TopologicalSpace Q
inst✝ : AddTorsor W Q
g : P →ᴬ[R] Q
toAffineMap✝ : P →ᵃ[R] Q
cont✝ : Continuous toAffineMap✝.toFun
h : { toAffineMap := toAffineMap✝, cont := cont✝ }.toAffineMap = g.toAffineMap
⊢ { toAffineMap := toAffineMap✝, cont := cont✝ } = g
state_after: case mk.mk
R : Type u_1
V : Type u_2
W : Type u_3
P : Type u_4
Q : Type u_5
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup V
inst✝⁶ : Module R V
inst✝⁵ : TopologicalSpace P
inst✝⁴ : AddTorsor V P
inst✝³ : AddCommGroup W
inst✝² : Module R W
inst✝¹ : TopologicalSpace Q
inst✝ : AddTorsor W Q
toAffineMap✝¹ : P →ᵃ[R] Q
cont✝¹ : Continuous toAffineMap✝¹.toFun
toAffineMap✝ : P →ᵃ[R] Q
cont✝ : Continuous toAffineMap✝.toFun
h :
  { toAffineMap := toAffineMap✝¹, cont := cont✝¹ }.toAffineMap =
    { toAffineMap := toAffineMap✝, cont := cont✝ }.toAffineMap
⊢ { toAffineMap := toAffineMap✝¹, cont := cont✝¹ } = { toAffineMap := toAffineMap✝, cont := cont✝ }

tactic: congr
state_before: case mk.mk
R : Type u_1
V : Type u_2
W : Type u_3
P : Type u_4
Q : Type u_5
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup V
inst✝⁶ : Module R V
inst✝⁵ : TopologicalSpace P
inst✝⁴ : AddTorsor V P
inst✝³ : AddCommGroup W
inst✝² : Module R W
inst✝¹ : TopologicalSpace Q
inst✝ : AddTorsor W Q
toAffineMap✝¹ : P →ᵃ[R] Q
cont✝¹ : Continuous toAffineMap✝¹.toFun
toAffineMap✝ : P →ᵃ[R] Q
cont✝ : Continuous toAffineMap✝.toFun
h :
  { toAffineMap := toAffineMap✝¹, cont := cont✝¹ }.toAffineMap =
    { toAffineMap := toAffineMap✝, cont := cont✝ }.toAffineMap
⊢ { toAffineMap := toAffineMap✝¹, cont := cont✝¹ } = { toAffineMap := toAffineMap✝, cont := cont✝ }
state_after: no goals
Theorem: Real.Angle.toReal_coe_eq_self_iff
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Angle.lean

tactic: rw [toReal_coe, toIocMod_eq_self two_pi_pos]
state_before: θ : ℝ
⊢ (↑θ).toReal = θ ↔ -π < θ ∧ θ ≤ π
state_after: θ : ℝ
⊢ θ ∈ Set.Ioc (-π) (-π + 2 * π) ↔ -π < θ ∧ θ ≤ π

tactic: ring_nf
state_before: θ : ℝ
⊢ θ ∈ Set.Ioc (-π) (-π + 2 * π) ↔ -π < θ ∧ θ ≤ π
state_after: θ : ℝ
⊢ θ ∈ Set.Ioc (-π) π ↔ -π < θ ∧ θ ≤ π

tactic: rfl
state_before: θ : ℝ
⊢ θ ∈ Set.Ioc (-π) π ↔ -π < θ ∧ θ ≤ π
state_after: no goals
Theorem: BoxIntegral.Prepartition.IsPartition.restrict
File: Mathlib/Analysis/BoxIntegral/Partition/Basic.lean

tactic: simp [h.iUnion_eq, hJ]
state_before: ι : Type u_1
I J J₁ J₂ : Box ι
π π₁ π₂ : Prepartition I
x : ι → ℝ
πi πi₁ πi₂ : (J : Box ι) → Prepartition J
h : π.IsPartition
hJ : J ≤ I
⊢ (π.restrict J).iUnion = ↑J
state_after: no goals
Theorem: Matrix.conjTranspose_nonsing_inv
File: Mathlib/LinearAlgebra/Matrix/NonsingularInverse.lean

tactic: rw [inv_def, inv_def, conjTranspose_smul, det_conjTranspose, adjugate_conjTranspose,
  Ring.inverse_star]
state_before: l : Type u_1
m : Type u
n : Type u'
α : Type v
inst✝³ : Fintype n
inst✝² : DecidableEq n
inst✝¹ : CommRing α
A B : Matrix n n α
inst✝ : StarRing α
⊢ A⁻¹ᴴ = Aᴴ⁻¹
state_after: no goals
Theorem: MeasureTheory.integrable_comp_mul_right_iff
File: Mathlib/MeasureTheory/Measure/Haar/NormedSpace.lean

tactic: simpa only [mul_comm] using integrable_comp_mul_left_iff g hR
state_before: F : Type u_1
inst✝ : NormedAddCommGroup F
g : ℝ → F
R : ℝ
hR : R ≠ 0
⊢ Integrable (fun x => g (x * R)) volume ↔ Integrable g volume
state_after: no goals
Theorem: LeftOrdContinuous.le_iff
File: Mathlib/Order/OrdContinuous.lean

tactic: simp only [← sup_eq_right, ← hf.map_sup, h.eq_iff]
state_before: α : Type u
β : Type v
γ : Type w
ι : Sort x
inst✝¹ : SemilatticeSup α
inst✝ : SemilatticeSup β
f : α → β
hf : LeftOrdContinuous f
h : Injective f
x y : α
⊢ f x ≤ f y ↔ x ≤ y
state_after: no goals