ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: Real.Angle.abs_cos_eq_abs_sin_of_two_zsmul_add_two_zsmul_eq_pi
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Angle.lean

Proof steps:
state_before: θ ψ : Angle
h : 2 • θ + 2 • ψ = ↑π
⊢ |θ.cos| = |ψ.sin|
state_after: no goals
tactic: exact abs_cos_eq_abs_sin_of_two_nsmul_add_two_nsmul_eq_pi h
Theorem: Finset.abs_sum_of_nonneg'
File: Mathlib/Algebra/Order/BigOperators/Group/Finset.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
M : Type u_4
N : Type u_5
G✝ : Type u_6
k : Type u_7
R : Type u_8
G : Type u_9
inst✝ : LinearOrderedAddCommGroup G
f : ι → G
s : Finset ι
hf : ∀ (i : ι), 0 ≤ f i
⊢ |∑ i ∈ s, f i| = ∑ i ∈ s, f i
state_after: no goals
tactic: rw [abs_of_nonneg (Finset.sum_nonneg' hf)]
Theorem: HomologicalComplex₂.total.mapAux.mapMap_D₂
File: Mathlib/Algebra/Homology/TotalComplex.lean

Proof steps:
state_before: C : Type u_1
inst✝⁵ : Category.{u_5, u_1} C
inst✝⁴ : Preadditive C
I₁ : Type u_2
I₂ : Type u_3
I₁₂ : Type u_4
c₁ : ComplexShape I₁
c₂ : ComplexShape I₂
K L M : HomologicalComplex₂ C c₁ c₂
φ : K ⟶ L
e : K ≅ L
ψ : L ⟶ M
c₁₂ : ComplexShape I₁₂
inst✝³ : DecidableEq I₁₂
inst✝² : TotalComplexShape c₁ c₂ c₁₂
inst✝¹ : K.HasTotal c₁₂
inst✝ : L.HasTotal c₁₂
i₁₂ i₁₂' : I₁₂
⊢ GradedObject.mapMap (toGradedObjectMap φ) (c₁.π c₂ c₁₂) i₁₂ ≫ L.D₂ c₁₂ i₁₂ i₁₂' =
    K.D₂ c₁₂ i₁₂ i₁₂' ≫ GradedObject.mapMap (toGradedObjectMap φ) (c₁.π c₂ c₁₂) i₁₂'
state_after: no goals
tactic: aesop_cat
Theorem: Matroid.base_iff_maximal_indep
File: Mathlib/Data/Matroid/Basic.lean

Proof steps:
state_before: α : Type u_1
M : Matroid α
B B' I J D X : Set α
e f : α
⊢ M.Base B ↔ M.Indep B ∧ ∀ (I : Set α), M.Indep I → B ⊆ I → B = I
state_after: α : Type u_1
M : Matroid α
B B' I J D X : Set α
e f : α
x✝ : M.Indep B ∧ ∀ (I : Set α), M.Indep I → B ⊆ I → B = I
h : M.Indep B
h' : ∀ (I : Set α), M.Indep I → B ⊆ I → B = I
⊢ M.Base B
tactic: refine ⟨fun h ↦ ⟨h.indep, fun _ ↦ h.eq_of_subset_indep ⟩, fun ⟨h, h'⟩ ↦ ?_⟩
state_before: α : Type u_1
M : Matroid α
B B' I J D X : Set α
e f : α
x✝ : M.Indep B ∧ ∀ (I : Set α), M.Indep I → B ⊆ I → B = I
h : M.Indep B
h' : ∀ (I : Set α), M.Indep I → B ⊆ I → B = I
⊢ M.Base B
state_after: case intro.intro
α : Type u_1
M : Matroid α
B B'✝ I J D X : Set α
e f : α
x✝ : M.Indep B ∧ ∀ (I : Set α), M.Indep I → B ⊆ I → B = I
h : M.Indep B
h' : ∀ (I : Set α), M.Indep I → B ⊆ I → B = I
B' : Set α
hB' : M.Base B'
hBB' : B ⊆ B'
⊢ M.Base B
tactic: obtain ⟨B', hB', hBB'⟩ := h.exists_base_superset
state_before: case intro.intro
α : Type u_1
M : Matroid α
B B'✝ I J D X : Set α
e f : α
x✝ : M.Indep B ∧ ∀ (I : Set α), M.Indep I → B ⊆ I → B = I
h : M.Indep B
h' : ∀ (I : Set α), M.Indep I → B ⊆ I → B = I
B' : Set α
hB' : M.Base B'
hBB' : B ⊆ B'
⊢ M.Base B
state_after: no goals
tactic: rwa [h' _ hB'.indep hBB']
Theorem: WittVector.truncate_comp_lift
File: Mathlib/RingTheory/WittVector/Truncated.lean

Proof steps:
state_before: p : ℕ
hp : Fact (Nat.Prime p)
n : ℕ
R : Type u_1
inst✝¹ : CommRing R
S : Type u_2
inst✝ : Semiring S
f : (k : ℕ) → S →+* TruncatedWittVector p k R
f_compat : ∀ (k₁ k₂ : ℕ) (hk : k₁ ≤ k₂), (TruncatedWittVector.truncate hk).comp (f k₂) = f k₁
⊢ (truncate n).comp (lift f f_compat) = f n
state_after: case a
p : ℕ
hp : Fact (Nat.Prime p)
n : ℕ
R : Type u_1
inst✝¹ : CommRing R
S : Type u_2
inst✝ : Semiring S
f : (k : ℕ) → S →+* TruncatedWittVector p k R
f_compat : ∀ (k₁ k₂ : ℕ) (hk : k₁ ≤ k₂), (TruncatedWittVector.truncate hk).comp (f k₂) = f k₁
x✝ : S
⊢ ((truncate n).comp (lift f f_compat)) x✝ = (f n) x✝
tactic: ext1
state_before: case a
p : ℕ
hp : Fact (Nat.Prime p)
n : ℕ
R : Type u_1
inst✝¹ : CommRing R
S : Type u_2
inst✝ : Semiring S
f : (k : ℕ) → S →+* TruncatedWittVector p k R
f_compat : ∀ (k₁ k₂ : ℕ) (hk : k₁ ≤ k₂), (TruncatedWittVector.truncate hk).comp (f k₂) = f k₁
x✝ : S
⊢ ((truncate n).comp (lift f f_compat)) x✝ = (f n) x✝
state_after: no goals
tactic: rw [RingHom.comp_apply, truncate_lift]
Theorem: Polynomial.divByMonic_one
File: Mathlib/Algebra/Polynomial/Div.lean

Proof steps:
state_before: R : Type u
S : Type v
T : Type w
A : Type z
a b : R
n : ℕ
inst✝ : Ring R
p✝ q p : R[X]
⊢ p /ₘ 1 = p
state_after: no goals
tactic: conv_rhs => rw [← modByMonic_add_div p monic_one]; simp
Theorem: Filter.frequently_atTop
File: Mathlib/Order/Filter/AtTopBot.lean

Proof steps:
state_before: ι : Type u_1
ι' : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
inst✝¹ : SemilatticeSup α
inst✝ : Nonempty α
p : α → Prop
⊢ (∀ (i : α), True → ∃ x ∈ Ici i, p x) ↔ ∀ (a : α), ∃ b ≥ a, p b
state_after: no goals
tactic: simp
Theorem: Subsemigroup.nonUnitalSubsemiringClosure_eq_closure
File: Mathlib/RingTheory/NonUnitalSubsemiring/Basic.lean

Proof steps:
state_before: R : Type u
S : Type v
T : Type w
inst✝² : NonUnitalNonAssocSemiring R
M : Subsemigroup R
inst✝¹ : NonUnitalNonAssocSemiring S
inst✝ : NonUnitalNonAssocSemiring T
⊢ M.nonUnitalSubsemiringClosure = NonUnitalSubsemiring.closure ↑M
state_after: case h
R : Type u
S : Type v
T : Type w
inst✝² : NonUnitalNonAssocSemiring R
M : Subsemigroup R
inst✝¹ : NonUnitalNonAssocSemiring S
inst✝ : NonUnitalNonAssocSemiring T
x✝ : R
⊢ x✝ ∈ M.nonUnitalSubsemiringClosure ↔ x✝ ∈ NonUnitalSubsemiring.closure ↑M
tactic: ext
state_before: case h
R : Type u
S : Type v
T : Type w
inst✝² : NonUnitalNonAssocSemiring R
M : Subsemigroup R
inst✝¹ : NonUnitalNonAssocSemiring S
inst✝ : NonUnitalNonAssocSemiring T
x✝ : R
⊢ x✝ ∈ M.nonUnitalSubsemiringClosure ↔ x✝ ∈ NonUnitalSubsemiring.closure ↑M
state_after: case h.refine_1.intro.intro
R : Type u
S : Type v
T : Type w
inst✝² : NonUnitalNonAssocSemiring R
M : Subsemigroup R
inst✝¹ : NonUnitalNonAssocSemiring S
inst✝ : NonUnitalNonAssocSemiring T
x✝ : R
hx : x✝ ∈ M.nonUnitalSubsemiringClosure
H1 : NonUnitalSubsemiring R
H2 : H1 ∈ {S | ↑M ⊆ ↑S}
⊢ x✝ ∈ (fun h => ↑H1) H2

case h.refine_2.intro.intro
R : Type u
S : Type v
T : Type w
inst✝² : NonUnitalNonAssocSemiring R
M : Subsemigroup R
inst✝¹ : NonUnitalNonAssocSemiring S
inst✝ : NonUnitalNonAssocSemiring T
x✝ : R
hx : x✝ ∈ NonUnitalSubsemiring.closure ↑M
s : R
sM : s ∈ ↑M
H1 : AddSubmonoid R
H2 : H1 ∈ {S | ↑M ⊆ ↑S}
⊢ s ∈ (fun h => ↑H1) H2
tactic: refine ⟨fun hx => ?_,
    fun hx => (NonUnitalSubsemiring.mem_closure.mp hx) M.nonUnitalSubsemiringClosure fun s sM => ?_⟩
  <;> rintro - ⟨H1, rfl⟩
  <;> rintro - ⟨H2, rfl⟩
Theorem: Nat.Partrec'.comp₁
File: Mathlib/Computability/Halting.lean

Proof steps:
state_before: n : ℕ
f : ℕ →. ℕ
g : Vector ℕ n → ℕ
hf : Partrec' fun v => f v.head
hg : Partrec' ↑g
⊢ Partrec' fun v => f (g v)
state_after: no goals
tactic: simpa using hf.comp' (Partrec'.cons hg Partrec'.nil)
Theorem: Set.subset_addCenter_add_units
File: Mathlib/Algebra/Group/Center.lean

Proof steps:
state_before: M : Type u_1
S T : Set M
inst✝ : Monoid M
x✝ : Mˣ
ha : x✝ ∈ Units.val ⁻¹' center M
⊢ x✝ ∈ center Mˣ
state_after: M : Type u_1
S T : Set M
inst✝ : Monoid M
x✝ : Mˣ
ha : x✝ ∈ Units.val ⁻¹' center M
⊢ ∀ (g : Mˣ), g * x✝ = x✝ * g
tactic: rw [_root_.Semigroup.mem_center_iff]
state_before: M : Type u_1
S T : Set M
inst✝ : Monoid M
x✝ : Mˣ
ha : x✝ ∈ Units.val ⁻¹' center M
⊢ ∀ (g : Mˣ), g * x✝ = x✝ * g
state_after: M : Type u_1
S T : Set M
inst✝ : Monoid M
x✝ : Mˣ
ha : x✝ ∈ Units.val ⁻¹' center M
g✝ : Mˣ
⊢ g✝ * x✝ = x✝ * g✝
tactic: intro _
state_before: M : Type u_1
S T : Set M
inst✝ : Monoid M
x✝ : Mˣ
ha : x✝ ∈ Units.val ⁻¹' center M
g✝ : Mˣ
⊢ g✝ * x✝ = x✝ * g✝
state_after: no goals
tactic: rw [← Units.eq_iff, Units.val_mul, Units.val_mul, ha.comm]
Theorem: WeierstrassCurve.Jacobian.addMap_of_Y_eq
File: Mathlib/AlgebraicGeometry/EllipticCurve/Jacobian.lean

Proof steps:
state_before: R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
P Q : Fin 3 → F
hP : W.Nonsingular P
hQ : W.Equation Q
hPz : P z ≠ 0
hQz : Q z ≠ 0
hx : P x * Q z ^ 2 = Q x * P z ^ 2
hy' : P y * Q z ^ 3 = W.negY Q * P z ^ 3
⊢ W.addMap ⟦P⟧ ⟦Q⟧ = ⟦![1, 1, 0]⟧
state_after: case pos
R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
P Q : Fin 3 → F
hP : W.Nonsingular P
hQ : W.Equation Q
hPz : P z ≠ 0
hQz : Q z ≠ 0
hx : P x * Q z ^ 2 = Q x * P z ^ 2
hy' : P y * Q z ^ 3 = W.negY Q * P z ^ 3
hy : P y * Q z ^ 3 = Q y * P z ^ 3
⊢ W.addMap ⟦P⟧ ⟦Q⟧ = ⟦![1, 1, 0]⟧

case neg
R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
P Q : Fin 3 → F
hP : W.Nonsingular P
hQ : W.Equation Q
hPz : P z ≠ 0
hQz : Q z ≠ 0
hx : P x * Q z ^ 2 = Q x * P z ^ 2
hy' : P y * Q z ^ 3 = W.negY Q * P z ^ 3
hy : ¬P y * Q z ^ 3 = Q y * P z ^ 3
⊢ W.addMap ⟦P⟧ ⟦Q⟧ = ⟦![1, 1, 0]⟧
tactic: by_cases hy : P y * Q z ^ 3 = Q y * P z ^ 3
Theorem: TensorProduct.congr_pow
File: Mathlib/LinearAlgebra/TensorProduct/Basic.lean

Proof steps:
state_before: R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
T : Type u_9
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : AddCommMonoid T
inst✝⁷ : Module R M
inst✝⁶ : Module R N
inst✝⁵ : Module R P
inst✝⁴ : Module R Q
inst✝³ : Module R S
inst✝² : Module R T
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M ≃ₗ[R] M
g : N ≃ₗ[R] N
n : ℕ
⊢ congr f g ^ n = congr (f ^ n) (g ^ n)
state_after: no goals
tactic: induction n with
  | zero => exact congr_refl_refl.symm
  | succ n ih => simp_rw [pow_succ, ih, congr_mul]
Theorem: RingQuot.mkRingHom_def
File: Mathlib/Algebra/RingQuot.lean

Proof steps:
state_before: R : Type uR
inst✝³ : Semiring R
S : Type uS
inst✝² : CommSemiring S
T : Type uT
A : Type uA
inst✝¹ : Semiring A
inst✝ : Algebra S A
r✝ r : R → R → Prop
⊢ (fun x => { toQuot := Quot.mk (Rel r) x }) 1 = 1
state_after: no goals
tactic: simp [← one_quot]
state_before: R : Type uR
inst✝³ : Semiring R
S : Type uS
inst✝² : CommSemiring S
T : Type uT
A : Type uA
inst✝¹ : Semiring A
inst✝ : Algebra S A
r✝ r : R → R → Prop
⊢ ∀ (x y : R),
    { toFun := fun x => { toQuot := Quot.mk (Rel r) x }, map_one' := ⋯ }.toFun (x * y) =
      { toFun := fun x => { toQuot := Quot.mk (Rel r) x }, map_one' := ⋯ }.toFun x *
        { toFun := fun x => { toQuot := Quot.mk (Rel r) x }, map_one' := ⋯ }.toFun y
state_after: no goals
tactic: simp [mul_quot]
state_before: R : Type uR
inst✝³ : Semiring R
S : Type uS
inst✝² : CommSemiring S
T : Type uT
A : Type uA
inst✝¹ : Semiring A
inst✝ : Algebra S A
r✝ r : R → R → Prop
⊢ (↑{ toFun := fun x => { toQuot := Quot.mk (Rel r) x }, map_one' := ⋯, map_mul' := ⋯ }).toFun 0 = 0
state_after: no goals
tactic: simp [← zero_quot]
state_before: R : Type uR
inst✝³ : Semiring R
S : Type uS
inst✝² : CommSemiring S
T : Type uT
A : Type uA
inst✝¹ : Semiring A
inst✝ : Algebra S A
r✝ r : R → R → Prop
⊢ ∀ (x y : R),
    (↑{ toFun := fun x => { toQuot := Quot.mk (Rel r) x }, map_one' := ⋯, map_mul' := ⋯ }).toFun (x + y) =
      (↑{ toFun := fun x => { toQuot := Quot.mk (Rel r) x }, map_one' := ⋯, map_mul' := ⋯ }).toFun x +
        (↑{ toFun := fun x => { toQuot := Quot.mk (Rel r) x }, map_one' := ⋯, map_mul' := ⋯ }).toFun y
state_after: no goals
tactic: simp [add_quot]
Theorem: Matrix.zpow_one_add
File: Mathlib/LinearAlgebra/Matrix/ZPow.lean

Proof steps:
state_before: n' : Type u_1
inst✝² : DecidableEq n'
inst✝¹ : Fintype n'
R : Type u_2
inst✝ : CommRing R
A : M
h : IsUnit A.det
i : ℤ
⊢ A ^ (1 + i) = A * A ^ i
state_after: no goals
tactic: rw [zpow_add h, zpow_one]
Theorem: CompositionAsSet.blocks_sum
File: Mathlib/Combinatorics/Enumerative/Composition.lean

Proof steps:
state_before: n : ℕ
c : CompositionAsSet n
⊢ c.blocks.sum = n
state_after: n : ℕ
c : CompositionAsSet n
this : take c.length c.blocks = c.blocks
⊢ c.blocks.sum = n
tactic: have : c.blocks.take c.length = c.blocks := take_all_of_le (by simp [blocks])
state_before: n : ℕ
c : CompositionAsSet n
this : take c.length c.blocks = c.blocks
⊢ c.blocks.sum = n
state_after: n : ℕ
c : CompositionAsSet n
this : take c.length c.blocks = c.blocks
⊢ ↑(Fin.last n) = n
tactic: rw [← this, c.blocks_partial_sum c.length_lt_card_boundaries, c.boundary_length]
state_before: n : ℕ
c : CompositionAsSet n
this : take c.length c.blocks = c.blocks
⊢ ↑(Fin.last n) = n
state_after: no goals
tactic: rfl
Theorem: Turing.PartrecToTM2.supports_singleton
File: Mathlib/Computability/TMToPartrec.lean

Proof steps:
state_before: S : Finset Λ'
q : Λ'
⊢ Supports {q} S ↔ TM2.SupportsStmt S (tr q)
state_after: no goals
tactic: simp [Supports]
Theorem: lt_sub_iff_add_lt'
File: Mathlib/Algebra/Order/Group/Unbundled/Basic.lean

Proof steps:
state_before: α : Type u
inst✝² : CommGroup α
inst✝¹ : LT α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
a b c d : α
⊢ b < c / a ↔ a * b < c
state_after: no goals
tactic: rw [lt_div_iff_mul_lt, mul_comm]
Theorem: Nat.Ioc_succ_singleton
File: Mathlib/Order/Interval/Finset/Nat.lean

Proof steps:
state_before: a b c : ℕ
⊢ Ioc b (b + 1) = {b + 1}
state_after: no goals
tactic: rw [← Nat.Icc_succ_left, Icc_self]
Theorem: Composition.sizeUpTo_strict_mono
File: Mathlib/Combinatorics/Enumerative/Composition.lean

Proof steps:
state_before: n : ℕ
c : Composition n
i : ℕ
h : i < c.length
⊢ c.sizeUpTo i < c.sizeUpTo (i + 1)
state_after: n : ℕ
c : Composition n
i : ℕ
h : i < c.length
⊢ c.sizeUpTo i < c.sizeUpTo i + c.blocks[i]
tactic: rw [c.sizeUpTo_succ h]
state_before: n : ℕ
c : Composition n
i : ℕ
h : i < c.length
⊢ c.sizeUpTo i < c.sizeUpTo i + c.blocks[i]
state_after: no goals
tactic: simp
Theorem: Function.mulSupport_update_one
File: Mathlib/Algebra/Group/Support.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
A : Type u_3
B : Type u_4
M : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
inst✝³ : One M
inst✝² : One N
inst✝¹ : One P
inst✝ : DecidableEq α
f : α → M
x : α
⊢ mulSupport (update f x 1) = mulSupport f \ {x}
state_after: case h
α : Type u_1
β : Type u_2
A : Type u_3
B : Type u_4
M : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
inst✝³ : One M
inst✝² : One N
inst✝¹ : One P
inst✝ : DecidableEq α
f : α → M
x a : α
⊢ a ∈ mulSupport (update f x 1) ↔ a ∈ mulSupport f \ {x}
tactic: ext a
state_before: case h
α : Type u_1
β : Type u_2
A : Type u_3
B : Type u_4
M : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
inst✝³ : One M
inst✝² : One N
inst✝¹ : One P
inst✝ : DecidableEq α
f : α → M
x a : α
⊢ a ∈ mulSupport (update f x 1) ↔ a ∈ mulSupport f \ {x}
state_after: no goals
tactic: rcases eq_or_ne a x with rfl | hne <;> simp [*]
Theorem: Ideal.prod_sup_eq_top
File: Mathlib/RingTheory/Ideal/Operations.lean

Proof steps:
state_before: R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J✝ K L : Ideal R
s : Finset ι
J : ι → Ideal R
h : ∀ i ∈ s, J i ⊔ I = ⊤
⊢ (∏ i ∈ s, J i) ⊔ I = ⊤
state_after: R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J✝ K L : Ideal R
s : Finset ι
J : ι → Ideal R
h : ∀ i ∈ s, J i ⊔ I = ⊤
⊢ ∀ i ∈ s, I ⊔ J i = ⊤
tactic: rw [sup_comm, sup_prod_eq_top]
state_before: R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J✝ K L : Ideal R
s : Finset ι
J : ι → Ideal R
h : ∀ i ∈ s, J i ⊔ I = ⊤
⊢ ∀ i ∈ s, I ⊔ J i = ⊤
state_after: R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J✝ K L : Ideal R
s : Finset ι
J : ι → Ideal R
h : ∀ i ∈ s, J i ⊔ I = ⊤
i : ι
hi : i ∈ s
⊢ I ⊔ J i = ⊤
tactic: intro i hi
state_before: R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J✝ K L : Ideal R
s : Finset ι
J : ι → Ideal R
h : ∀ i ∈ s, J i ⊔ I = ⊤
i : ι
hi : i ∈ s
⊢ I ⊔ J i = ⊤
state_after: no goals
tactic: rw [sup_comm, h i hi]
Theorem: ConjAct.mem_orbit_conjAct
File: Mathlib/GroupTheory/GroupAction/ConjAct.lean

Proof steps:
state_before: α : Type u_1
M : Type u_2
G : Type u_3
G₀ : Type u_4
R : Type u_5
K : Type u_6
inst✝ : Group G
g h : G
⊢ g ∈ orbit (ConjAct G) h ↔ IsConj g h
state_after: α : Type u_1
M : Type u_2
G : Type u_3
G₀ : Type u_4
R : Type u_5
K : Type u_6
inst✝ : Group G
g h : G
⊢ (∃ x, x • h = g) ↔ ∃ c, c * h * c⁻¹ = g
tactic: rw [isConj_comm, isConj_iff, mem_orbit_iff]
state_before: α : Type u_1
M : Type u_2
G : Type u_3
G₀ : Type u_4
R : Type u_5
K : Type u_6
inst✝ : Group G
g h : G
⊢ (∃ x, x • h = g) ↔ ∃ c, c * h * c⁻¹ = g
state_after: no goals
tactic: rfl
Theorem: CategoryTheory.Pretriangulated.binaryProductTriangleIsoBinaryBiproductTriangle_inv_hom₃
File: Mathlib/CategoryTheory/Triangulated/Basic.lean

Proof steps:
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : HasShift C ℤ
T₁ T₂ T₃ : Triangle C
X₁ X₂ : C
inst✝¹ : HasZeroMorphisms C
inst✝ : HasBinaryBiproduct X₁ X₂
⊢ (binaryProductTriangle X₁ X₂).mor₁ ≫ (biprod.isoProd X₁ X₂).symm.hom =
    (Iso.refl (binaryProductTriangle X₁ X₂).obj₁).hom ≫ (binaryBiproductTriangle X₁ X₂).mor₁
state_after: no goals
tactic: aesop_cat
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : HasShift C ℤ
T₁ T₂ T₃ : Triangle C
X₁ X₂ : C
inst✝¹ : HasZeroMorphisms C
inst✝ : HasBinaryBiproduct X₁ X₂
⊢ (binaryProductTriangle X₁ X₂).mor₂ ≫ (Iso.refl (binaryProductTriangle X₁ X₂).obj₃).hom =
    (biprod.isoProd X₁ X₂).symm.hom ≫ (binaryBiproductTriangle X₁ X₂).mor₂
state_after: no goals
tactic: aesop_cat
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : HasShift C ℤ
T₁ T₂ T₃ : Triangle C
X₁ X₂ : C
inst✝¹ : HasZeroMorphisms C
inst✝ : HasBinaryBiproduct X₁ X₂
⊢ (binaryProductTriangle X₁ X₂).mor₃ ≫ (shiftFunctor C 1).map (Iso.refl (binaryProductTriangle X₁ X₂).obj₁).hom =
    (Iso.refl (binaryProductTriangle X₁ X₂).obj₃).hom ≫ (binaryBiproductTriangle X₁ X₂).mor₃
state_after: no goals
tactic: aesop_cat
Theorem: Polynomial.descPochhammer_smeval_eq_ascPochhammer
File: Mathlib/RingTheory/Binomial.lean

Proof steps:
state_before: R : Type u_1
S : Type u_2
inst✝² : NonAssocRing R
inst✝¹ : Pow R ℕ
inst✝ : NatPowAssoc R
r : R
n : ℕ
⊢ (descPochhammer ℤ n).smeval r = (ascPochhammer ℕ n).smeval (r - ↑n + 1)
state_after: no goals
tactic: induction n with
  | zero => simp only [descPochhammer_zero, ascPochhammer_zero, smeval_one, npow_zero]
  | succ n ih =>
    rw [Nat.cast_succ, sub_add, add_sub_cancel_right, descPochhammer_succ_right, smeval_mul, ih,
      ascPochhammer_succ_left, X_mul, smeval_mul_X, smeval_comp, smeval_sub, ← C_eq_natCast,
      smeval_add, smeval_one, smeval_C]
    simp only [smeval_X, npow_one, npow_zero, zsmul_one, Int.cast_natCast, one_smul]
Theorem: MeasureTheory.Integrable.comp_snd_map_prod_mk
File: Mathlib/Probability/Kernel/CondDistrib.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
Ω✝ : Type u_3
F : Type u_4
inst✝⁴ : MeasurableSpace Ω✝
inst✝³ : StandardBorelSpace Ω✝
inst✝² : Nonempty Ω✝
inst✝¹ : NormedAddCommGroup F
mα : MeasurableSpace α
μ✝ : Measure α
inst✝ : IsFiniteMeasure μ✝
X✝ : α → β
Y : α → Ω✝
mβ : MeasurableSpace β
s : Set Ω✝
t : Set β
f✝ : β × Ω✝ → F
Ω : Type u_5
mΩ : MeasurableSpace Ω
X : Ω → β
μ : Measure Ω
f : Ω → F
hf_int : Integrable f μ
⊢ Integrable (fun x => f x.2) (Measure.map (fun ω => (X ω, ω)) μ)
state_after: case pos
α : Type u_1
β : Type u_2
Ω✝ : Type u_3
F : Type u_4
inst✝⁴ : MeasurableSpace Ω✝
inst✝³ : StandardBorelSpace Ω✝
inst✝² : Nonempty Ω✝
inst✝¹ : NormedAddCommGroup F
mα : MeasurableSpace α
μ✝ : Measure α
inst✝ : IsFiniteMeasure μ✝
X✝ : α → β
Y : α → Ω✝
mβ : MeasurableSpace β
s : Set Ω✝
t : Set β
f✝ : β × Ω✝ → F
Ω : Type u_5
mΩ : MeasurableSpace Ω
X : Ω → β
μ : Measure Ω
f : Ω → F
hf_int : Integrable f μ
hX : AEMeasurable X μ
⊢ Integrable (fun x => f x.2) (Measure.map (fun ω => (X ω, ω)) μ)

case neg
α : Type u_1
β : Type u_2
Ω✝ : Type u_3
F : Type u_4
inst✝⁴ : MeasurableSpace Ω✝
inst✝³ : StandardBorelSpace Ω✝
inst✝² : Nonempty Ω✝
inst✝¹ : NormedAddCommGroup F
mα : MeasurableSpace α
μ✝ : Measure α
inst✝ : IsFiniteMeasure μ✝
X✝ : α → β
Y : α → Ω✝
mβ : MeasurableSpace β
s : Set Ω✝
t : Set β
f✝ : β × Ω✝ → F
Ω : Type u_5
mΩ : MeasurableSpace Ω
X : Ω → β
μ : Measure Ω
f : Ω → F
hf_int : Integrable f μ
hX : ¬AEMeasurable X μ
⊢ Integrable (fun x => f x.2) (Measure.map (fun ω => (X ω, ω)) μ)
tactic: by_cases hX : AEMeasurable X μ
Theorem: Summable.countable_support_ennreal
File: Mathlib/Topology/Instances/ENNReal.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
f : α → ℝ≥0∞
h : ∑' (i : α), f i ≠ ⊤
⊢ (support f).Countable
state_after: case intro
α : Type u_1
β : Type u_2
γ : Type u_3
f : α → ℝ≥0
h : ∑' (i : α), (fun i => ↑(f i)) i ≠ ⊤
⊢ (support fun i => ↑(f i)).Countable
tactic: lift f to α → ℝ≥0 using ENNReal.ne_top_of_tsum_ne_top h
state_before: case intro
α : Type u_1
β : Type u_2
γ : Type u_3
f : α → ℝ≥0
h : ∑' (i : α), (fun i => ↑(f i)) i ≠ ⊤
⊢ (support fun i => ↑(f i)).Countable
state_after: no goals
tactic: simpa [support] using (ENNReal.tsum_coe_ne_top_iff_summable.1 h).countable_support_nnreal
Theorem: Set.ncard_subtype
File: Mathlib/Data/Set/Card.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
s✝ t : Set α
f : α → β
P : α → Prop
s : Set α
⊢ {x | ↑x ∈ s}.ncard = (s ∩ setOf P).ncard
state_after: case h.e'_3.h.e'_2
α : Type u_1
β : Type u_2
s✝ t : Set α
f : α → β
P : α → Prop
s : Set α
⊢ s ∩ setOf P = (fun a => ↑a) '' {x | ↑x ∈ s}
tactic: convert (ncard_image_of_injective _ (@Subtype.coe_injective _ P)).symm
state_before: case h.e'_3.h.e'_2
α : Type u_1
β : Type u_2
s✝ t : Set α
f : α → β
P : α → Prop
s : Set α
⊢ s ∩ setOf P = (fun a => ↑a) '' {x | ↑x ∈ s}
state_after: case h.e'_3.h.e'_2.h
α : Type u_1
β : Type u_2
s✝ t : Set α
f : α → β
P : α → Prop
s : Set α
x : α
⊢ x ∈ s ∩ setOf P ↔ x ∈ (fun a => ↑a) '' {x | ↑x ∈ s}
tactic: ext x
state_before: case h.e'_3.h.e'_2.h
α : Type u_1
β : Type u_2
s✝ t : Set α
f : α → β
P : α → Prop
s : Set α
x : α
⊢ x ∈ s ∩ setOf P ↔ x ∈ (fun a => ↑a) '' {x | ↑x ∈ s}
state_after: no goals
tactic: simp [← and_assoc, exists_eq_right]
Theorem: Primrec.map_decode_iff
File: Mathlib/Computability/Primrec.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
σ : Type u_5
inst✝⁴ : Primcodable α
inst✝³ : Primcodable β
inst✝² : Primcodable γ
inst✝¹ : Primcodable δ
inst✝ : Primcodable σ
f : α → β → σ
⊢ (Primrec₂ fun a n => Option.map (f a) (decode n)) ↔ Primrec₂ f
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
σ : Type u_5
inst✝⁴ : Primcodable α
inst✝³ : Primcodable β
inst✝² : Primcodable γ
inst✝¹ : Primcodable δ
inst✝ : Primcodable σ
f : α → β → σ
⊢ (Primrec₂ fun a n => (decode n).bind (some ∘ f a)) ↔ Primrec₂ f
tactic: simp only [Option.map_eq_bind]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
σ : Type u_5
inst✝⁴ : Primcodable α
inst✝³ : Primcodable β
inst✝² : Primcodable γ
inst✝¹ : Primcodable δ
inst✝ : Primcodable σ
f : α → β → σ
⊢ (Primrec₂ fun a n => (decode n).bind (some ∘ f a)) ↔ Primrec₂ f
state_after: no goals
tactic: exact bind_decode_iff.trans Primrec₂.option_some_iff