ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: Multiset.count_singleton
File: Mathlib/Data/Multiset/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type v
γ : Type u_2
inst✝ : DecidableEq α
s : Multiset α
a b : α
⊢ count a {b} = if a = b then 1 else 0
state_after: no goals
tactic: simp only [count_cons, ← cons_zero, count_zero, zero_add]
Theorem: Set.mem_pow
File: Mathlib/Data/Set/Pointwise/ListOfFn.lean

Proof steps:
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝ : Monoid α
s t : Set α
a✝ : α
m n✝ : ℕ
a : α
n : ℕ
⊢ a ∈ s ^ n ↔ ∃ f, (List.ofFn fun i => ↑(f i)).prod = a
state_after: no goals
tactic: rw [← mem_prod_list_ofFn, List.ofFn_const, List.prod_replicate]
Theorem: RatFunc.num_div_dvd'
File: Mathlib/FieldTheory/RatFunc/Basic.lean

Proof steps:
state_before: K : Type u
inst✝ : Field K
p q : K[X]
hq : q ≠ 0
⊢ C (q / gcd p q).leadingCoeff⁻¹ * (p / gcd p q) ∣ p
state_after: no goals
tactic: simpa using num_div_dvd p hq
Theorem: Absorbs.empty
File: Mathlib/Topology/Bornology/Absorbs.lean

Proof steps:
state_before: M : Type u_1
α : Type u_2
inst✝¹ : Bornology M
inst✝ : SMul M α
s s₁ s₂ t t₁ t₂ : Set α
S T : Set (Set α)
⊢ Absorbs M s ∅
state_after: no goals
tactic: simp [Absorbs]
Theorem: HasStrictDerivAt.smul
File: Mathlib/Analysis/Calculus/Deriv/Mul.lean

Proof steps:
state_before: 𝕜 : Type u
inst✝¹⁰ : NontriviallyNormedField 𝕜
F : Type v
inst✝⁹ : NormedAddCommGroup F
inst✝⁸ : NormedSpace 𝕜 F
E : Type w
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
G : Type u_1
inst✝⁵ : NormedAddCommGroup G
inst✝⁴ : NormedSpace 𝕜 G
f f₀ f₁ g : 𝕜 → F
f' f₀' f₁' g' : F
x : 𝕜
s t : Set 𝕜
L L₁ L₂ : Filter 𝕜
𝕜' : Type u_2
inst✝³ : NontriviallyNormedField 𝕜'
inst✝² : NormedAlgebra 𝕜 𝕜'
inst✝¹ : NormedSpace 𝕜' F
inst✝ : IsScalarTower 𝕜 𝕜' F
c : 𝕜 → 𝕜'
c' : 𝕜'
hc : HasStrictDerivAt c c' x
hf : HasStrictDerivAt f f' x
⊢ HasStrictDerivAt (fun y => c y • f y) (c x • f' + c' • f x) x
state_after: no goals
tactic: simpa using (hc.smul hf).hasStrictDerivAt
Theorem: FiniteField.roots_X_pow_card_sub_X
File: Mathlib/FieldTheory/Finite/Basic.lean

Proof steps:
state_before: K : Type u_1
R : Type u_2
inst✝³ : Field K
inst✝² : Fintype K
p : ℕ
inst✝¹ : Fact (Nat.Prime p)
inst✝ : Algebra (ZMod p) K
⊢ (X ^ q - X).roots = univ.val
state_after: no goals
tactic: classical
    have aux : (X ^ q - X : K[X]) ≠ 0 := X_pow_card_sub_X_ne_zero K Fintype.one_lt_card
    have : (roots (X ^ q - X : K[X])).toFinset = Finset.univ := by
      rw [eq_univ_iff_forall]
      intro x
      rw [Multiset.mem_toFinset, mem_roots aux, IsRoot.def, eval_sub, eval_pow, eval_X,
        sub_eq_zero, pow_card]
    rw [← this, Multiset.toFinset_val, eq_comm, Multiset.dedup_eq_self]
    apply nodup_roots
    rw [separable_def]
    convert isCoprime_one_right.neg_right (R := K[X]) using 1
    rw [derivative_sub, derivative_X, derivative_X_pow, Nat.cast_card_eq_zero K, C_0,
      zero_mul, zero_sub]
Theorem: quasiIsoAt_iff_exactAt
File: Mathlib/Algebra/Homology/QuasiIso.lean

Proof steps:
state_before: ι : Type u_1
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : HasZeroMorphisms C
c : ComplexShape ι
K L M K' L' : HomologicalComplex C c
f : K ⟶ L
i : ι
inst✝¹ : K.HasHomology i
inst✝ : L.HasHomology i
hK : K.ExactAt i
⊢ QuasiIsoAt f i ↔ L.ExactAt i
state_after: ι : Type u_1
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : HasZeroMorphisms C
c : ComplexShape ι
K L M K' L' : HomologicalComplex C c
f : K ⟶ L
i : ι
inst✝¹ : K.HasHomology i
inst✝ : L.HasHomology i
hK : IsZero (K.sc i).homology
⊢ IsIso (ShortComplex.homologyMap ((shortComplexFunctor C c i).map f)) ↔ IsZero (L.sc i).homology
tactic: simp only [quasiIsoAt_iff, ShortComplex.quasiIso_iff, exactAt_iff,
    ShortComplex.exact_iff_isZero_homology] at hK ⊢
state_before: ι : Type u_1
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : HasZeroMorphisms C
c : ComplexShape ι
K L M K' L' : HomologicalComplex C c
f : K ⟶ L
i : ι
inst✝¹ : K.HasHomology i
inst✝ : L.HasHomology i
hK : IsZero (K.sc i).homology
⊢ IsIso (ShortComplex.homologyMap ((shortComplexFunctor C c i).map f)) ↔ IsZero (L.sc i).homology
state_after: case mp
ι : Type u_1
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : HasZeroMorphisms C
c : ComplexShape ι
K L M K' L' : HomologicalComplex C c
f : K ⟶ L
i : ι
inst✝¹ : K.HasHomology i
inst✝ : L.HasHomology i
hK : IsZero (K.sc i).homology
⊢ IsIso (ShortComplex.homologyMap ((shortComplexFunctor C c i).map f)) → IsZero (L.sc i).homology

case mpr
ι : Type u_1
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : HasZeroMorphisms C
c : ComplexShape ι
K L M K' L' : HomologicalComplex C c
f : K ⟶ L
i : ι
inst✝¹ : K.HasHomology i
inst✝ : L.HasHomology i
hK : IsZero (K.sc i).homology
⊢ IsZero (L.sc i).homology → IsIso (ShortComplex.homologyMap ((shortComplexFunctor C c i).map f))
tactic: constructor
Theorem: IntermediateField.equivOfEq_rfl
File: Mathlib/FieldTheory/Adjoin.lean

Proof steps:
state_before: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S : IntermediateField F E
⊢ equivOfEq ⋯ = AlgEquiv.refl
state_after: case h.a
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S : IntermediateField F E
a✝ : ↥S
⊢ ↑((equivOfEq ⋯) a✝) = ↑(AlgEquiv.refl a✝)
tactic: ext
state_before: case h.a
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S : IntermediateField F E
a✝ : ↥S
⊢ ↑((equivOfEq ⋯) a✝) = ↑(AlgEquiv.refl a✝)
state_after: no goals
tactic: rfl
Theorem: Behrend.sphere_zero_subset
File: Mathlib/Combinatorics/Additive/AP/Three/Behrend.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
n d k N : ℕ
x✝ x : Fin n → ℕ
⊢ x ∈ sphere n d 0 → x ∈ 0
state_after: no goals
tactic: simp [sphere, Function.funext_iff]
Theorem: CategoryTheory.Limits.prod_rightUnitor_inv_naturality
File: Mathlib/CategoryTheory/Limits/Shapes/BinaryProducts.lean

Proof steps:
state_before: C : Type u
inst✝² : Category.{v, u} C
X Y : C
inst✝¹ : HasTerminal C
inst✝ : HasBinaryProducts C
f : X ⟶ Y
⊢ (prod.rightUnitor X).inv ≫ prod.map f (𝟙 (⊤_ C)) = f ≫ (prod.rightUnitor Y).inv
state_after: no goals
tactic: rw [Iso.inv_comp_eq, ← Category.assoc, Iso.eq_comp_inv, prod.rightUnitor_hom_naturality]
Theorem: WittVector.mem_ker_truncate
File: Mathlib/RingTheory/WittVector/Truncated.lean

Proof steps:
state_before: p : ℕ
hp : Fact (Nat.Prime p)
n : ℕ
R : Type u_1
inst✝ : CommRing R
x : 𝕎 R
⊢ x ∈ RingHom.ker (truncate n) ↔ ∀ i < n, x.coeff i = 0
state_after: p : ℕ
hp : Fact (Nat.Prime p)
n : ℕ
R : Type u_1
inst✝ : CommRing R
x : 𝕎 R
⊢ (∀ (i : Fin n), TruncatedWittVector.coeff i ({ toFun := truncateFun n, map_one' := ⋯, map_mul' := ⋯ } x) = 0) ↔
    ∀ i < n, x.coeff i = 0
tactic: simp only [RingHom.mem_ker, truncate, truncateFun, RingHom.coe_mk, TruncatedWittVector.ext_iff,
    TruncatedWittVector.coeff_mk, coeff_zero]
state_before: p : ℕ
hp : Fact (Nat.Prime p)
n : ℕ
R : Type u_1
inst✝ : CommRing R
x : 𝕎 R
⊢ (∀ (i : Fin n), TruncatedWittVector.coeff i ({ toFun := truncateFun n, map_one' := ⋯, map_mul' := ⋯ } x) = 0) ↔
    ∀ i < n, x.coeff i = 0
state_after: no goals
tactic: exact Fin.forall_iff
Theorem: Cubic.monic_of_a_eq_one
File: Mathlib/Algebra/CubicDiscriminant.lean

Proof steps:
state_before: R : Type u_1
S : Type u_2
F : Type u_3
K : Type u_4
P Q : Cubic R
a b c d a' b' c' d' : R
inst✝ : Semiring R
ha : P.a = 1
⊢ P.toPoly.Monic
state_after: R : Type u_1
S : Type u_2
F : Type u_3
K : Type u_4
P Q : Cubic R
a b c d a' b' c' d' : R
inst✝ : Semiring R
ha : P.a = 1
a✝ : Nontrivial R
⊢ P.toPoly.Monic
tactic: nontriviality R
state_before: R : Type u_1
S : Type u_2
F : Type u_3
K : Type u_4
P Q : Cubic R
a b c d a' b' c' d' : R
inst✝ : Semiring R
ha : P.a = 1
a✝ : Nontrivial R
⊢ P.toPoly.Monic
state_after: no goals
tactic: rw [Monic, leadingCoeff_of_a_ne_zero (ha ▸ one_ne_zero), ha]
Theorem: QuotientGroup.eq_one_iff
File: Mathlib/GroupTheory/QuotientGroup.lean

Proof steps:
state_before: G : Type u
inst✝² : Group G
N✝ : Subgroup G
nN✝ : N✝.Normal
H : Type v
inst✝¹ : Group H
M : Type x
inst✝ : Monoid M
N : Subgroup G
nN : N.Normal
x : G
⊢ ↑x = 1 ↔ x ∈ N
state_after: G : Type u
inst✝² : Group G
N✝ : Subgroup G
nN✝ : N✝.Normal
H : Type v
inst✝¹ : Group H
M : Type x
inst✝ : Monoid M
N : Subgroup G
nN : N.Normal
x : G
⊢ x⁻¹ * 1 ∈ N ↔ x ∈ N
tactic: refine QuotientGroup.eq.trans ?_
state_before: G : Type u
inst✝² : Group G
N✝ : Subgroup G
nN✝ : N✝.Normal
H : Type v
inst✝¹ : Group H
M : Type x
inst✝ : Monoid M
N : Subgroup G
nN : N.Normal
x : G
⊢ x⁻¹ * 1 ∈ N ↔ x ∈ N
state_after: no goals
tactic: rw [mul_one, Subgroup.inv_mem_iff]
Theorem: Erased.out_mk
File: Mathlib/Data/Erased.lean

Proof steps:
state_before: α : Sort u_1
a : α
⊢ (mk a).out = a
state_after: α : Sort u_1
a : α
h : ∃ a_1, (fun b => a_1 = b) = (mk a).fst := (mk a).snd
⊢ (mk a).out = a
tactic: let h := (mk a).2
state_before: α : Sort u_1
a : α
h : ∃ a_1, (fun b => a_1 = b) = (mk a).fst := (mk a).snd
⊢ (mk a).out = a
state_after: α : Sort u_1
a : α
h : ∃ a_1, (fun b => a_1 = b) = (mk a).fst := (mk a).snd
⊢ Classical.choose h = a
tactic: show Classical.choose h = a
state_before: α : Sort u_1
a : α
h : ∃ a_1, (fun b => a_1 = b) = (mk a).fst := (mk a).snd
⊢ Classical.choose h = a
state_after: α : Sort u_1
a : α
h : ∃ a_1, (fun b => a_1 = b) = (mk a).fst := (mk a).snd
this : (fun b => Classical.choose h = b) = (mk a).fst
⊢ Classical.choose h = a
tactic: have := Classical.choose_spec h
state_before: α : Sort u_1
a : α
h : ∃ a_1, (fun b => a_1 = b) = (mk a).fst := (mk a).snd
this : (fun b => Classical.choose h = b) = (mk a).fst
⊢ Classical.choose h = a
state_after: no goals
tactic: exact cast (congr_fun this a).symm rfl
Theorem: Prod.counit_comp_inl
File: Mathlib/RingTheory/Coalgebra/Basic.lean

Proof steps:
state_before: R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid A
inst✝⁴ : AddCommMonoid B
inst✝³ : Module R A
inst✝² : Module R B
inst✝¹ : Coalgebra R A
inst✝ : Coalgebra R B
⊢ counit ∘ₗ inl R A B = counit
state_after: case h
R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid A
inst✝⁴ : AddCommMonoid B
inst✝³ : Module R A
inst✝² : Module R B
inst✝¹ : Coalgebra R A
inst✝ : Coalgebra R B
x✝ : A
⊢ (counit ∘ₗ inl R A B) x✝ = counit x✝
tactic: ext
state_before: case h
R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid A
inst✝⁴ : AddCommMonoid B
inst✝³ : Module R A
inst✝² : Module R B
inst✝¹ : Coalgebra R A
inst✝ : Coalgebra R B
x✝ : A
⊢ (counit ∘ₗ inl R A B) x✝ = counit x✝
state_after: no goals
tactic: simp
Theorem: CochainComplex.mappingCone.ext_to
File: Mathlib/Algebra/Homology/HomotopyCategory/MappingCone.lean

Proof steps:
state_before: C : Type u_1
D : Type u_2
inst✝⁴ : Category.{u_3, u_1} C
inst✝³ : Category.{?u.51400, u_2} D
inst✝² : Preadditive C
inst✝¹ : Preadditive D
F G : CochainComplex C ℤ
φ : F ⟶ G
inst✝ : HasHomotopyCofiber φ
i j : ℤ
hij : i + 1 = j
A : C
f g : A ⟶ (mappingCone φ).X i
h₁ : f ≫ (↑(fst φ)).v i j hij = g ≫ (↑(fst φ)).v i j hij
h₂ : f ≫ (snd φ).v i i ⋯ = g ≫ (snd φ).v i i ⋯
⊢ f ≫ homotopyCofiber.sndX φ i = g ≫ homotopyCofiber.sndX φ i
state_after: no goals
tactic: simpa [snd] using h₂
Theorem: Finset.finsuppAntidiag_zero
File: Mathlib/Algebra/Order/Antidiag/Finsupp.lean

Proof steps:
state_before: ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : DecidableEq μ
inst✝¹ : CanonicallyOrderedAddCommMonoid μ
inst✝ : HasAntidiagonal μ
s : Finset ι
⊢ s.finsuppAntidiag 0 = {0}
state_after: case a
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : DecidableEq μ
inst✝¹ : CanonicallyOrderedAddCommMonoid μ
inst✝ : HasAntidiagonal μ
s : Finset ι
f : ι →₀ μ
⊢ f ∈ s.finsuppAntidiag 0 ↔ f ∈ {0}
tactic: ext f
state_before: case a
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : DecidableEq μ
inst✝¹ : CanonicallyOrderedAddCommMonoid μ
inst✝ : HasAntidiagonal μ
s : Finset ι
f : ι →₀ μ
⊢ f ∈ s.finsuppAntidiag 0 ↔ f ∈ {0}
state_after: no goals
tactic: simp [finsuppAntidiag, ← DFunLike.coe_fn_eq (g := f), -mem_piAntidiag, eq_comm]
Theorem: rank_fun_eq_lift_mul
File: Mathlib/LinearAlgebra/Dimension/Constructions.lean

Proof steps:
state_before: R S : Type u
M : Type v
M' : Type v'
M₁ : Type v
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type u_1
inst✝¹³ : Ring R
inst✝¹² : CommRing S
inst✝¹¹ : AddCommGroup M
inst✝¹⁰ : AddCommGroup M'
inst✝⁹ : AddCommGroup M₁
inst✝⁸ : Module R M
inst✝⁷ : Module R M'
inst✝⁶ : Module R M₁
inst✝⁵ : StrongRankCondition R
inst✝⁴ : Module.Free R M
inst✝³ : (i : η) → AddCommGroup (φ i)
inst✝² : (i : η) → Module R (φ i)
inst✝¹ : ∀ (i : η), Module.Free R (φ i)
inst✝ : Fintype η
⊢ Module.rank R (η → M) = ↑(Fintype.card η) * lift.{u₁', v} (Module.rank R M)
state_after: no goals
tactic: rw [rank_pi, Cardinal.sum_const, Cardinal.mk_fintype, Cardinal.lift_natCast]
Theorem: imageToKernel_comp_hom_inv_comp
File: Mathlib/Algebra/Homology/ImageToKernel.lean

Proof steps:
state_before: ι : Type u_1
V : Type u
inst✝³ : Category.{v, u} V
inst✝² : HasZeroMorphisms V
A B C : V
f : A ⟶ B
g : B ⟶ C
inst✝¹ : HasEqualizers V
inst✝ : HasImages V
Z : V
i : B ≅ Z
w : (f ≫ i.hom) ≫ i.inv ≫ g = 0
⊢ f ≫ g = 0
state_after: no goals
tactic: simpa using w
state_before: ι : Type u_1
V : Type u
inst✝³ : Category.{v, u} V
inst✝² : HasZeroMorphisms V
A B C : V
f : A ⟶ B
g : B ⟶ C
inst✝¹ : HasEqualizers V
inst✝ : HasImages V
Z : V
i : B ≅ Z
w : (f ≫ i.hom) ≫ i.inv ≫ g = 0
⊢ imageToKernel (f ≫ i.hom) (i.inv ≫ g) w =
    (imageSubobjectCompIso f i.hom).hom ≫ imageToKernel f g ⋯ ≫ (kernelSubobjectIsoComp i.inv g).inv
state_after: case h
ι : Type u_1
V : Type u
inst✝³ : Category.{v, u} V
inst✝² : HasZeroMorphisms V
A B C : V
f : A ⟶ B
g : B ⟶ C
inst✝¹ : HasEqualizers V
inst✝ : HasImages V
Z : V
i : B ≅ Z
w : (f ≫ i.hom) ≫ i.inv ≫ g = 0
⊢ imageToKernel (f ≫ i.hom) (i.inv ≫ g) w ≫ (kernelSubobject (i.inv ≫ g)).arrow =
    ((imageSubobjectCompIso f i.hom).hom ≫ imageToKernel f g ⋯ ≫ (kernelSubobjectIsoComp i.inv g).inv) ≫
      (kernelSubobject (i.inv ≫ g)).arrow
tactic: ext
state_before: case h
ι : Type u_1
V : Type u
inst✝³ : Category.{v, u} V
inst✝² : HasZeroMorphisms V
A B C : V
f : A ⟶ B
g : B ⟶ C
inst✝¹ : HasEqualizers V
inst✝ : HasImages V
Z : V
i : B ≅ Z
w : (f ≫ i.hom) ≫ i.inv ≫ g = 0
⊢ imageToKernel (f ≫ i.hom) (i.inv ≫ g) w ≫ (kernelSubobject (i.inv ≫ g)).arrow =
    ((imageSubobjectCompIso f i.hom).hom ≫ imageToKernel f g ⋯ ≫ (kernelSubobjectIsoComp i.inv g).inv) ≫
      (kernelSubobject (i.inv ≫ g)).arrow
state_after: no goals
tactic: simp
Theorem: CategoryTheory.tensorRightHomEquiv_whiskerLeft_comp_evaluation
File: Mathlib/CategoryTheory/Monoidal/Rigid/Basic.lean

Proof steps:
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
inst✝² : MonoidalCategory C
X Y : C
inst✝¹ : HasRightDual X
inst✝ : HasRightDual Y
f : X ⟶ Y
⊢ (tensorRightHomEquiv Yᘁ X Xᘁ (𝟙_ C)) (Yᘁ ◁ f ≫ ε_ Y Yᘁ) = fᘁ ≫ (λ_ Xᘁ).inv
state_after: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
inst✝² : MonoidalCategory C
X Y : C
inst✝¹ : HasRightDual X
inst✝ : HasRightDual Y
f : X ⟶ Y
⊢ (ρ_ Yᘁ).inv ≫ Yᘁ ◁ η_ X Xᘁ ≫ (α_ Yᘁ X Xᘁ).inv ≫ (Yᘁ ◁ f ≫ ε_ Y Yᘁ) ▷ Xᘁ =
    ((ρ_ Yᘁ).inv ≫ Yᘁ ◁ η_ X Xᘁ ≫ Yᘁ ◁ f ▷ Xᘁ ≫ (α_ Yᘁ Y Xᘁ).inv ≫ ε_ Y Yᘁ ▷ Xᘁ ≫ (λ_ Xᘁ).hom) ≫ (λ_ Xᘁ).inv
tactic: dsimp [tensorRightHomEquiv, rightAdjointMate]
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
inst✝² : MonoidalCategory C
X Y : C
inst✝¹ : HasRightDual X
inst✝ : HasRightDual Y
f : X ⟶ Y
⊢ (ρ_ Yᘁ).inv ≫ Yᘁ ◁ η_ X Xᘁ ≫ (α_ Yᘁ X Xᘁ).inv ≫ (Yᘁ ◁ f ≫ ε_ Y Yᘁ) ▷ Xᘁ =
    ((ρ_ Yᘁ).inv ≫ Yᘁ ◁ η_ X Xᘁ ≫ Yᘁ ◁ f ▷ Xᘁ ≫ (α_ Yᘁ Y Xᘁ).inv ≫ ε_ Y Yᘁ ▷ Xᘁ ≫ (λ_ Xᘁ).hom) ≫ (λ_ Xᘁ).inv
state_after: no goals
tactic: simp
Theorem: Bundle.TotalSpace.mk_cast
File: Mathlib/Data/Bundle.lean

Proof steps:
state_before: B : Type u_1
F : Type u_2
E : B → Type u_3
x x' : B
h : x = x'
b : E x
⊢ mk' F x' (cast ⋯ b) = { proj := x, snd := b }
state_after: B : Type u_1
F : Type u_2
E : B → Type u_3
x : B
b : E x
⊢ mk' F x (cast ⋯ b) = { proj := x, snd := b }
tactic: subst h
state_before: B : Type u_1
F : Type u_2
E : B → Type u_3
x : B
b : E x
⊢ mk' F x (cast ⋯ b) = { proj := x, snd := b }
state_after: no goals
tactic: rfl
Theorem: TotallyBounded.isSeparable
File: Mathlib/Topology/Metrizable/Uniformity.lean

Proof steps:
state_before: X : Type u_1
inst✝ : UniformSpace X
i : (𝓤 X).IsCountablyGenerated
s : Set X
h : TotallyBounded s
⊢ TopologicalSpace.IsSeparable s
state_after: X : Type u_1
inst✝ : UniformSpace X
i : (𝓤 X).IsCountablyGenerated
s : Set X
h : TotallyBounded s
this : PseudoEMetricSpace X := PseudoMetricSpace.toPseudoEMetricSpace
⊢ TopologicalSpace.IsSeparable s
tactic: letI := (UniformSpace.pseudoMetricSpace (X := X)).toPseudoEMetricSpace
state_before: X : Type u_1
inst✝ : UniformSpace X
i : (𝓤 X).IsCountablyGenerated
s : Set X
h : TotallyBounded s
this : PseudoEMetricSpace X := PseudoMetricSpace.toPseudoEMetricSpace
⊢ TopologicalSpace.IsSeparable s
state_after: X : Type u_1
inst✝ : UniformSpace X
i : (𝓤 X).IsCountablyGenerated
s : Set X
this : PseudoEMetricSpace X := PseudoMetricSpace.toPseudoEMetricSpace
h : ∀ ε > 0, ∃ t, t.Finite ∧ s ⊆ ⋃ y ∈ t, EMetric.ball y ε
⊢ TopologicalSpace.IsSeparable s
tactic: rw [EMetric.totallyBounded_iff] at h
state_before: X : Type u_1
inst✝ : UniformSpace X
i : (𝓤 X).IsCountablyGenerated
s : Set X
this : PseudoEMetricSpace X := PseudoMetricSpace.toPseudoEMetricSpace
h : ∀ ε > 0, ∃ t, t.Finite ∧ s ⊆ ⋃ y ∈ t, EMetric.ball y ε
⊢ TopologicalSpace.IsSeparable s
state_after: X : Type u_1
inst✝ : UniformSpace X
i : (𝓤 X).IsCountablyGenerated
s : Set X
this : PseudoEMetricSpace X := PseudoMetricSpace.toPseudoEMetricSpace
h : ∀ ε > 0, ∃ t, t.Finite ∧ s ⊆ ⋃ y ∈ t, EMetric.ball y ε
h' : ∀ ε > 0, ∃ t, t.Countable ∧ s ⊆ ⋃ y ∈ t, EMetric.closedBall y ε
⊢ TopologicalSpace.IsSeparable s
tactic: have h' : ∀ ε > 0, ∃ t, Set.Countable t ∧ s ⊆ ⋃ y ∈ t, EMetric.closedBall y ε := by
    intro ε hε
    obtain ⟨t, ht⟩ := h ε hε
    refine ⟨t, ht.1.countable, subset_trans ht.2 ?_⟩
    gcongr
    exact EMetric.ball_subset_closedBall
state_before: X : Type u_1
inst✝ : UniformSpace X
i : (𝓤 X).IsCountablyGenerated
s : Set X
this : PseudoEMetricSpace X := PseudoMetricSpace.toPseudoEMetricSpace
h : ∀ ε > 0, ∃ t, t.Finite ∧ s ⊆ ⋃ y ∈ t, EMetric.ball y ε
h' : ∀ ε > 0, ∃ t, t.Countable ∧ s ⊆ ⋃ y ∈ t, EMetric.closedBall y ε
⊢ TopologicalSpace.IsSeparable s
state_after: case intro.intro.intro
X : Type u_1
inst✝ : UniformSpace X
i : (𝓤 X).IsCountablyGenerated
s : Set X
this : PseudoEMetricSpace X := PseudoMetricSpace.toPseudoEMetricSpace
h : ∀ ε > 0, ∃ t, t.Finite ∧ s ⊆ ⋃ y ∈ t, EMetric.ball y ε
h' : ∀ ε > 0, ∃ t, t.Countable ∧ s ⊆ ⋃ y ∈ t, EMetric.closedBall y ε
t : Set X
left✝ : t ⊆ s
htc : t.Countable
hts : s ⊆ _root_.closure t
⊢ TopologicalSpace.IsSeparable s
tactic: obtain ⟨t, _, htc, hts⟩ := EMetric.subset_countable_closure_of_almost_dense_set s h'
state_before: case intro.intro.intro
X : Type u_1
inst✝ : UniformSpace X
i : (𝓤 X).IsCountablyGenerated
s : Set X
this : PseudoEMetricSpace X := PseudoMetricSpace.toPseudoEMetricSpace
h : ∀ ε > 0, ∃ t, t.Finite ∧ s ⊆ ⋃ y ∈ t, EMetric.ball y ε
h' : ∀ ε > 0, ∃ t, t.Countable ∧ s ⊆ ⋃ y ∈ t, EMetric.closedBall y ε
t : Set X
left✝ : t ⊆ s
htc : t.Countable
hts : s ⊆ _root_.closure t
⊢ TopologicalSpace.IsSeparable s
state_after: no goals
tactic: exact ⟨t, htc, hts⟩
Theorem: Orientation.tan_oangle_add_right_of_oangle_eq_pi_div_two
File: Mathlib/Geometry/Euclidean/Angle/Oriented/RightAngle.lean

Proof steps:
state_before: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
hd2 : Fact (finrank ℝ V = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : o.oangle x y = ↑(π / 2)
⊢ (o.oangle x (x + y)).tan = ‖y‖ / ‖x‖
state_after: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
hd2 : Fact (finrank ℝ V = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : o.oangle x y = ↑(π / 2)
hs : (o.oangle x (x + y)).sign = 1
⊢ (o.oangle x (x + y)).tan = ‖y‖ / ‖x‖
tactic: have hs : (o.oangle x (x + y)).sign = 1 := by
    rw [oangle_sign_add_right, h, Real.Angle.sign_coe_pi_div_two]
state_before: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
hd2 : Fact (finrank ℝ V = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : o.oangle x y = ↑(π / 2)
hs : (o.oangle x (x + y)).sign = 1
⊢ (o.oangle x (x + y)).tan = ‖y‖ / ‖x‖
state_after: no goals
tactic: rw [o.oangle_eq_angle_of_sign_eq_one hs, Real.Angle.tan_coe,
    InnerProductGeometry.tan_angle_add_of_inner_eq_zero (o.inner_eq_zero_of_oangle_eq_pi_div_two h)]
Theorem: hammingNorm_smul
File: Mathlib/InformationTheory/Hamming.lean

Proof steps:
state_before: α : Type u_1
ι : Type u_2
β : ι → Type u_3
inst✝⁶ : Fintype ι
inst✝⁵ : (i : ι) → DecidableEq (β i)
γ : ι → Type u_4
inst✝⁴ : (i : ι) → DecidableEq (γ i)
inst✝³ : (i : ι) → Zero (β i)
inst✝² : (i : ι) → Zero (γ i)
inst✝¹ : Zero α
inst✝ : (i : ι) → SMulWithZero α (β i)
k : α
hk : ∀ (i : ι), IsSMulRegular (β i) k
x : (i : ι) → β i
i : ι
⊢ (fun i c => k • c) i 0 = 0
state_after: no goals
tactic: simp_rw [smul_zero]
Theorem: Nat.ofDigits_div_pow_eq_ofDigits_drop
File: Mathlib/Data/Nat/Digits.lean

Proof steps:
state_before: n p i : ℕ
hpos : 0 < p
digits : List ℕ
w₁ : ∀ l ∈ digits, l < p
⊢ ofDigits p digits / p ^ i = ofDigits p (List.drop i digits)
state_after: case zero
n p : ℕ
hpos : 0 < p
digits : List ℕ
w₁ : ∀ l ∈ digits, l < p
⊢ ofDigits p digits / p ^ 0 = ofDigits p (List.drop 0 digits)

case succ
n p : ℕ
hpos : 0 < p
digits : List ℕ
w₁ : ∀ l ∈ digits, l < p
i : ℕ
hi : ofDigits p digits / p ^ i = ofDigits p (List.drop i digits)
⊢ ofDigits p digits / p ^ (i + 1) = ofDigits p (List.drop (i + 1) digits)
tactic: induction' i with i hi
Theorem: Batteries.HashMap.Imp.Buckets.exists_of_update
File: .lake/packages/batteries/Batteries/Data/HashMap/WF.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
self : Buckets α β
i : USize
d : AssocList α β
h : i.toNat < self.val.size
⊢ ∃ l₁ l₂, self.val.data = l₁ ++ self.val[i] :: l₂ ∧ l₁.length = i.toNat ∧ (self.update i d h).val.data = l₁ ++ d :: l₂
state_after: α : Type u_1
β : Type u_2
self : Buckets α β
i : USize
d : AssocList α β
h : i.toNat < self.val.size
⊢ ∃ l₁ l₂,
    self.val.data = l₁ ++ self.val.data[i.toNat] :: l₂ ∧
      l₁.length = i.toNat ∧ (self.update i d h).val.data = l₁ ++ d :: l₂
tactic: simp only [Array.data_length, Array.ugetElem_eq_getElem, Array.getElem_eq_data_getElem]
state_before: α : Type u_1
β : Type u_2
self : Buckets α β
i : USize
d : AssocList α β
h : i.toNat < self.val.size
⊢ ∃ l₁ l₂,
    self.val.data = l₁ ++ self.val.data[i.toNat] :: l₂ ∧
      l₁.length = i.toNat ∧ (self.update i d h).val.data = l₁ ++ d :: l₂
state_after: no goals
tactic: exact List.exists_of_set' h
Theorem: Polynomial.span_singleton_annIdealGenerator
File: Mathlib/LinearAlgebra/AnnihilatingPolynomial.lean

Proof steps:
state_before: 𝕜 : Type u_1
A : Type u_2
inst✝² : Field 𝕜
inst✝¹ : Ring A
inst✝ : Algebra 𝕜 A
a : A
⊢ Ideal.span {annIdealGenerator 𝕜 a} = annIdeal 𝕜 a
state_after: case pos
𝕜 : Type u_1
A : Type u_2
inst✝² : Field 𝕜
inst✝¹ : Ring A
inst✝ : Algebra 𝕜 A
a : A
h : annIdealGenerator 𝕜 a = 0
⊢ Ideal.span {annIdealGenerator 𝕜 a} = annIdeal 𝕜 a

case neg
𝕜 : Type u_1
A : Type u_2
inst✝² : Field 𝕜
inst✝¹ : Ring A
inst✝ : Algebra 𝕜 A
a : A
h : ¬annIdealGenerator 𝕜 a = 0
⊢ Ideal.span {annIdealGenerator 𝕜 a} = annIdeal 𝕜 a
tactic: by_cases h : annIdealGenerator 𝕜 a = 0
Theorem: CategoryTheory.ShortComplex.leftHomologyMap'_op
File: Mathlib/Algebra/Homology/ShortComplex/RightHomology.lean

Proof steps:
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
φ : S₁ ⟶ S₂
h₁ : S₁.LeftHomologyData
h₂ : S₂.LeftHomologyData
⊢ (leftHomologyMap' φ h₁ h₂).op = rightHomologyMap' (opMap φ) h₂.op h₁.op
state_after: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
φ : S₁ ⟶ S₂
h₁ : S₁.LeftHomologyData
h₂ : S₂.LeftHomologyData
γ : LeftHomologyMapData φ h₁ h₂ := leftHomologyMapData φ h₁ h₂
⊢ (leftHomologyMap' φ h₁ h₂).op = rightHomologyMap' (opMap φ) h₂.op h₁.op
tactic: let γ : LeftHomologyMapData φ h₁ h₂ := leftHomologyMapData φ h₁ h₂
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
φ : S₁ ⟶ S₂
h₁ : S₁.LeftHomologyData
h₂ : S₂.LeftHomologyData
γ : LeftHomologyMapData φ h₁ h₂ := leftHomologyMapData φ h₁ h₂
⊢ (leftHomologyMap' φ h₁ h₂).op = rightHomologyMap' (opMap φ) h₂.op h₁.op
state_after: no goals
tactic: simp only [γ.leftHomologyMap'_eq, γ.op.rightHomologyMap'_eq,
    LeftHomologyMapData.op_φH]