ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: LieAlgebra.IsKilling.traceForm_eq_zero_of_mem_ker_of_mem_span_coroot
File: Mathlib/Algebra/Lie/Weights/Killing.lean

Proof steps:
state_before: R : Type u_1
K : Type u_2
L : Type u_3
inst✝⁹ : CommRing R
inst✝⁸ : LieRing L
inst✝⁷ : LieAlgebra R L
inst✝⁶ : Field K
inst✝⁵ : LieAlgebra K L
inst✝⁴ : FiniteDimensional K L
H : LieSubalgebra K L
inst✝³ : H.IsCartanSubalgebra
inst✝² : IsTriangularizable K (↥H) L
inst✝¹ : IsKilling K L
inst✝ : CharZero K
α : Weight K (↥H) L
x y : ↥H
hx : x ∈ Weight.ker
hy : y ∈ span K {coroot α}
⊢ ((traceForm K (↥H) L) x) y = 0
state_after: R : Type u_1
K : Type u_2
L : Type u_3
inst✝⁹ : CommRing R
inst✝⁸ : LieRing L
inst✝⁷ : LieAlgebra R L
inst✝⁶ : Field K
inst✝⁵ : LieAlgebra K L
inst✝⁴ : FiniteDimensional K L
H : LieSubalgebra K L
inst✝³ : H.IsCartanSubalgebra
inst✝² : IsTriangularizable K (↥H) L
inst✝¹ : IsKilling K L
inst✝ : CharZero K
α : Weight K (↥H) L
x y : ↥H
hx : x ∈ Weight.ker
hy : y ∈ span K {x | ∃ y ∈ rootSpace H ⇑α, ∃ z ∈ rootSpace H (-⇑α), ⁅y, z⁆ = ↑x}
⊢ ((traceForm K (↥H) L) x) y = 0
tactic: rw [← coe_corootSpace_eq_span_singleton, LieSubmodule.mem_coeSubmodule, mem_corootSpace'] at hy
state_before: R : Type u_1
K : Type u_2
L : Type u_3
inst✝⁹ : CommRing R
inst✝⁸ : LieRing L
inst✝⁷ : LieAlgebra R L
inst✝⁶ : Field K
inst✝⁵ : LieAlgebra K L
inst✝⁴ : FiniteDimensional K L
H : LieSubalgebra K L
inst✝³ : H.IsCartanSubalgebra
inst✝² : IsTriangularizable K (↥H) L
inst✝¹ : IsKilling K L
inst✝ : CharZero K
α : Weight K (↥H) L
x y : ↥H
hx : x ∈ Weight.ker
hy : y ∈ span K {x | ∃ y ∈ rootSpace H ⇑α, ∃ z ∈ rootSpace H (-⇑α), ⁅y, z⁆ = ↑x}
⊢ ((traceForm K (↥H) L) x) y = 0
state_after: no goals
tactic: induction hy using Submodule.span_induction' with
  | mem z hz =>
    obtain ⟨u, hu, v, -, huv⟩ := hz
    change killingForm K L (x : L) (z : L) = 0
    replace hx : α x = 0 := by simpa using hx
    rw [← huv, ← traceForm_apply_lie_apply, ← LieSubalgebra.coe_bracket_of_module,
      lie_eq_smul_of_mem_rootSpace hu, hx, zero_smul, map_zero, LinearMap.zero_apply]
  | zero => simp
  | add _ _ _ _ hx hy => simp [hx, hy]
  | smul _ _ _ hz => simp [hz]
Theorem: Metric.mem_ball'
File: Mathlib/Topology/MetricSpace/Pseudo/Defs.lean

Proof steps:
state_before: α : Type u
β : Type v
X : Type u_1
ι : Type u_2
inst✝ : PseudoMetricSpace α
x y z : α
δ ε ε₁ ε₂ : ℝ
s : Set α
⊢ y ∈ ball x ε ↔ dist x y < ε
state_after: no goals
tactic: rw [dist_comm, mem_ball]
Theorem: Finset.geomSum_injective
File: Mathlib/Combinatorics/Colex.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
s t : Finset ℕ
n✝ n : ℕ
hn : 2 ≤ n
⊢ Injective fun s => ∑ i ∈ s, n ^ i
state_after: α : Type u_1
β : Type u_2
s t : Finset ℕ
n✝ n : ℕ
hn : 2 ≤ n
a₁✝ a₂✝ : Finset ℕ
h : (fun s => ∑ i ∈ s, n ^ i) a₁✝ = (fun s => ∑ i ∈ s, n ^ i) a₂✝
⊢ a₁✝ = a₂✝
tactic: intro _ _ h
state_before: α : Type u_1
β : Type u_2
s t : Finset ℕ
n✝ n : ℕ
hn : 2 ≤ n
a₁✝ a₂✝ : Finset ℕ
h : (fun s => ∑ i ∈ s, n ^ i) a₁✝ = (fun s => ∑ i ∈ s, n ^ i) a₂✝
⊢ a₁✝ = a₂✝
state_after: no goals
tactic: rwa [le_antisymm_iff, geomSum_le_geomSum_iff_toColex_le_toColex hn,
    geomSum_le_geomSum_iff_toColex_le_toColex hn, ← le_antisymm_iff, Colex.toColex.injEq] at h
Theorem: Algebra.PowerBasis.norm_gen_eq_coeff_zero_minpoly
File: Mathlib/RingTheory/Norm/Basic.lean

Proof steps:
state_before: R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
pb : PowerBasis R S
⊢ (norm R) pb.gen = (-1) ^ pb.dim * (minpoly R pb.gen).coeff 0
state_after: no goals
tactic: rw [norm_eq_matrix_det pb.basis, det_eq_sign_charpoly_coeff, charpoly_leftMulMatrix,
    Fintype.card_fin]
Theorem: GenContFract.of_s_head_aux
File: Mathlib/Algebra/ContinuedFractions/Computation/Translations.lean

Proof steps:
state_before: K : Type u_1
inst✝¹ : LinearOrderedField K
inst✝ : FloorRing K
v✝ : K
n : ℕ
v : K
⊢ (of v).s.get? 0 = (IntFractPair.stream v 1).bind (some ∘ fun p => { a := 1, b := ↑p.b })
state_after: K : Type u_1
inst✝¹ : LinearOrderedField K
inst✝ : FloorRing K
v✝ : K
n : ℕ
v : K
⊢ (match (IntFractPair.of v, Stream'.Seq.tail ⟨IntFractPair.stream v, ⋯⟩) with
          | (h, s) => { h := ↑h.b, s := Stream'.Seq.map (fun p => { a := 1, b := ↑p.b }) s }).s.get?
      0 =
    (IntFractPair.stream v 1).bind (some ∘ fun p => { a := 1, b := ↑p.b })
tactic: rw [of, IntFractPair.seq1]
state_before: K : Type u_1
inst✝¹ : LinearOrderedField K
inst✝ : FloorRing K
v✝ : K
n : ℕ
v : K
⊢ (match (IntFractPair.of v, Stream'.Seq.tail ⟨IntFractPair.stream v, ⋯⟩) with
          | (h, s) => { h := ↑h.b, s := Stream'.Seq.map (fun p => { a := 1, b := ↑p.b }) s }).s.get?
      0 =
    (IntFractPair.stream v 1).bind (some ∘ fun p => { a := 1, b := ↑p.b })
state_after: K : Type u_1
inst✝¹ : LinearOrderedField K
inst✝ : FloorRing K
v✝ : K
n : ℕ
v : K
⊢ Option.map (fun p => { a := 1, b := ↑p.b }) ((IntFractPair.stream v).tail.get 0) =
    (IntFractPair.stream v 1).bind (some ∘ fun p => { a := 1, b := ↑p.b })
tactic: simp only [of, Stream'.Seq.map_tail, Stream'.Seq.map, Stream'.Seq.tail, Stream'.Seq.head,
    Stream'.Seq.get?, Stream'.map]
state_before: K : Type u_1
inst✝¹ : LinearOrderedField K
inst✝ : FloorRing K
v✝ : K
n : ℕ
v : K
⊢ Option.map (fun p => { a := 1, b := ↑p.b }) ((IntFractPair.stream v).tail.get 0) =
    (IntFractPair.stream v 1).bind (some ∘ fun p => { a := 1, b := ↑p.b })
state_after: K : Type u_1
inst✝¹ : LinearOrderedField K
inst✝ : FloorRing K
v✝ : K
n : ℕ
v : K
⊢ (match IntFractPair.stream v (Nat.succ 0) with
    | some x => some { a := 1, b := ↑x.b }
    | none => none) =
    (IntFractPair.stream v 1).bind (some ∘ fun p => { a := 1, b := ↑p.b })
tactic: rw [← Stream'.get_succ, Stream'.get, Option.map]
state_before: K : Type u_1
inst✝¹ : LinearOrderedField K
inst✝ : FloorRing K
v✝ : K
n : ℕ
v : K
⊢ (match IntFractPair.stream v (Nat.succ 0) with
    | some x => some { a := 1, b := ↑x.b }
    | none => none) =
    (IntFractPair.stream v 1).bind (some ∘ fun p => { a := 1, b := ↑p.b })
state_after: no goals
tactic: split <;> simp_all only [Option.some_bind, Option.none_bind, Function.comp_apply]
Theorem: tsum_mul_tsum_eq_tsum_sum_antidiagonal
File: Mathlib/Topology/Algebra/InfiniteSum/Ring.lean

Proof steps:
state_before: ι : Type u_1
κ : Type u_2
R : Type u_3
α : Type u_4
A : Type u_5
inst✝⁵ : AddCommMonoid A
inst✝⁴ : HasAntidiagonal A
inst✝³ : TopologicalSpace α
inst✝² : NonUnitalNonAssocSemiring α
f g : A → α
inst✝¹ : T3Space α
inst✝ : TopologicalSemiring α
hf : Summable f
hg : Summable g
hfg : Summable fun x => f x.1 * g x.2
⊢ (∑' (n : A), f n) * ∑' (n : A), g n = ∑' (n : A), ∑ kl ∈ antidiagonal n, f kl.1 * g kl.2
state_after: ι : Type u_1
κ : Type u_2
R : Type u_3
α : Type u_4
A : Type u_5
inst✝⁵ : AddCommMonoid A
inst✝⁴ : HasAntidiagonal A
inst✝³ : TopologicalSpace α
inst✝² : NonUnitalNonAssocSemiring α
f g : A → α
inst✝¹ : T3Space α
inst✝ : TopologicalSemiring α
hf : Summable f
hg : Summable g
hfg : Summable fun x => f x.1 * g x.2
⊢ (∑' (n : A), f n) * ∑' (n : A), g n = ∑' (x : A) (b : ↑↑(antidiagonal x)), f (↑b).1 * g (↑b).2
tactic: conv_rhs => congr; ext; rw [← Finset.sum_finset_coe, ← tsum_fintype]
state_before: ι : Type u_1
κ : Type u_2
R : Type u_3
α : Type u_4
A : Type u_5
inst✝⁵ : AddCommMonoid A
inst✝⁴ : HasAntidiagonal A
inst✝³ : TopologicalSpace α
inst✝² : NonUnitalNonAssocSemiring α
f g : A → α
inst✝¹ : T3Space α
inst✝ : TopologicalSemiring α
hf : Summable f
hg : Summable g
hfg : Summable fun x => f x.1 * g x.2
⊢ (∑' (n : A), f n) * ∑' (n : A), g n = ∑' (x : A) (b : ↑↑(antidiagonal x)), f (↑b).1 * g (↑b).2
state_after: ι : Type u_1
κ : Type u_2
R : Type u_3
α : Type u_4
A : Type u_5
inst✝⁵ : AddCommMonoid A
inst✝⁴ : HasAntidiagonal A
inst✝³ : TopologicalSpace α
inst✝² : NonUnitalNonAssocSemiring α
f g : A → α
inst✝¹ : T3Space α
inst✝ : TopologicalSemiring α
hf : Summable f
hg : Summable g
hfg : Summable fun x => f x.1 * g x.2
⊢ ∑' (c : (n : A) × { x // x ∈ antidiagonal n }),
      f (sigmaAntidiagonalEquivProd c).1 * g (sigmaAntidiagonalEquivProd c).2 =
    ∑' (x : A) (b : ↑↑(antidiagonal x)), f (↑b).1 * g (↑b).2
tactic: rw [tsum_mul_tsum hf hg hfg, ← sigmaAntidiagonalEquivProd.tsum_eq (_ : A × A → α)]
state_before: ι : Type u_1
κ : Type u_2
R : Type u_3
α : Type u_4
A : Type u_5
inst✝⁵ : AddCommMonoid A
inst✝⁴ : HasAntidiagonal A
inst✝³ : TopologicalSpace α
inst✝² : NonUnitalNonAssocSemiring α
f g : A → α
inst✝¹ : T3Space α
inst✝ : TopologicalSemiring α
hf : Summable f
hg : Summable g
hfg : Summable fun x => f x.1 * g x.2
⊢ ∑' (c : (n : A) × { x // x ∈ antidiagonal n }),
      f (sigmaAntidiagonalEquivProd c).1 * g (sigmaAntidiagonalEquivProd c).2 =
    ∑' (x : A) (b : ↑↑(antidiagonal x)), f (↑b).1 * g (↑b).2
state_after: no goals
tactic: exact
    tsum_sigma' (fun n ↦ (hasSum_fintype _).summable)
      (summable_mul_prod_iff_summable_mul_sigma_antidiagonal.mp hfg)
Theorem: Homeomorph.trans_transPartialHomeomorph
File: Mathlib/Topology/PartialHomeomorph.lean

Proof steps:
state_before: X : Type u_1
X' : Type u_2
Y : Type u_3
Y' : Type u_4
Z : Type u_5
Z' : Type u_6
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace X'
inst✝³ : TopologicalSpace Y
inst✝² : TopologicalSpace Y'
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace Z'
e✝ : X ≃ₜ Y
e'✝ : Y ≃ₜ Z
e : X ≃ₜ Y
e' : Y ≃ₜ Z
f'' : PartialHomeomorph Z Z'
⊢ (e.trans e').transPartialHomeomorph f'' = e.transPartialHomeomorph (e'.transPartialHomeomorph f'')
state_after: no goals
tactic: simp only [transPartialHomeomorph_eq_trans, PartialHomeomorph.trans_assoc,
    trans_toPartialHomeomorph]
Theorem: Finset.prod_le_prod_of_subset_of_one_le'
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
inst✝¹ : CommMonoid M
inst✝ : OrderedCommMonoid N
f g : ι → N
s t : Finset ι
h : s ⊆ t
hf : ∀ i ∈ t, i ∉ s → 1 ≤ f i
⊢ ∏ i ∈ s, f i ≤ ∏ i ∈ t, f i
state_after: no goals
tactic: classical calc
      ∏ i ∈ s, f i ≤ (∏ i ∈ t \ s, f i) * ∏ i ∈ s, f i :=
        le_mul_of_one_le_left' <| one_le_prod' <| by simpa only [mem_sdiff, and_imp]
      _ = ∏ i ∈ t \ s ∪ s, f i := (prod_union sdiff_disjoint).symm
      _ = ∏ i ∈ t, f i := by rw [sdiff_union_of_subset h]
Theorem: mul_div_right_comm
File: Mathlib/Algebra/Group/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝ : DivisionCommMonoid α
a b c d : α
⊢ a * b / c = a / c * b
state_after: no goals
tactic: simp
Theorem: Matroid.Indep.subset_basis_of_subset
File: Mathlib/Data/Matroid/Basic.lean

Proof steps:
state_before: α : Type u_1
M : Matroid α
B I J X Y : Set α
e : α
hI : M.Indep I
hIX : I ⊆ X
hX : autoParam (X ⊆ M.E) _auto✝
⊢ ∃ J, M.Basis J X ∧ I ⊆ J
state_after: case intro.intro.intro.intro
α : Type u_1
M : Matroid α
B I J✝ X Y : Set α
e : α
hI : M.Indep I
hIX : I ⊆ X
hX : autoParam (X ⊆ M.E) _auto✝
J : Set α
hJmax : ∀ ⦃b : Set α⦄, b ∈ {Y | M.Indep Y ∧ I ⊆ Y ∧ Y ⊆ X} → (fun x x_1 => x ⊆ x_1) J b → (fun x x_1 => x ⊆ x_1) b J
hJ : M.Indep J
hIJ : I ⊆ J
hJX : J ⊆ X
⊢ ∃ J, M.Basis J X ∧ I ⊆ J
tactic: obtain ⟨J, ⟨(hJ : M.Indep J),hIJ,hJX⟩, hJmax⟩ := M.maximality X hX I hI hIX
state_before: case intro.intro.intro.intro
α : Type u_1
M : Matroid α
B I J✝ X Y : Set α
e : α
hI : M.Indep I
hIX : I ⊆ X
hX : autoParam (X ⊆ M.E) _auto✝
J : Set α
hJmax : ∀ ⦃b : Set α⦄, b ∈ {Y | M.Indep Y ∧ I ⊆ Y ∧ Y ⊆ X} → (fun x x_1 => x ⊆ x_1) J b → (fun x x_1 => x ⊆ x_1) b J
hJ : M.Indep J
hIJ : I ⊆ J
hJX : J ⊆ X
⊢ ∃ J, M.Basis J X ∧ I ⊆ J
state_after: case h
α : Type u_1
M : Matroid α
B I J✝ X Y : Set α
e : α
hI : M.Indep I
hIX : I ⊆ X
hX : autoParam (X ⊆ M.E) _auto✝
J : Set α
hJmax : ∀ ⦃b : Set α⦄, b ∈ {Y | M.Indep Y ∧ I ⊆ Y ∧ Y ⊆ X} → (fun x x_1 => x ⊆ x_1) J b → (fun x x_1 => x ⊆ x_1) b J
hJ : M.Indep J
hIJ : I ⊆ J
hJX : J ⊆ X
⊢ M.Basis J X ∧ I ⊆ J
tactic: use J
state_before: case h
α : Type u_1
M : Matroid α
B I J✝ X Y : Set α
e : α
hI : M.Indep I
hIX : I ⊆ X
hX : autoParam (X ⊆ M.E) _auto✝
J : Set α
hJmax : ∀ ⦃b : Set α⦄, b ∈ {Y | M.Indep Y ∧ I ⊆ Y ∧ Y ⊆ X} → (fun x x_1 => x ⊆ x_1) J b → (fun x x_1 => x ⊆ x_1) b J
hJ : M.Indep J
hIJ : I ⊆ J
hJX : J ⊆ X
⊢ M.Basis J X ∧ I ⊆ J
state_after: case h
α : Type u_1
M : Matroid α
B I J✝ X Y : Set α
e : α
hI : M.Indep I
hIX : I ⊆ X
hX : autoParam (X ⊆ M.E) _auto✝
J : Set α
hJmax : ∀ ⦃b : Set α⦄, b ∈ {Y | M.Indep Y ∧ I ⊆ Y ∧ Y ⊆ X} → (fun x x_1 => x ⊆ x_1) J b → (fun x x_1 => x ⊆ x_1) b J
hJ : M.Indep J
hIJ : I ⊆ J
hJX : J ⊆ X
⊢ ∀ (J_1 : Set α), M.Indep J_1 → J ⊆ J_1 → J_1 ⊆ X → J = J_1
tactic: rw [and_iff_left hIJ, basis_iff, and_iff_right hJ, and_iff_right hJX]
state_before: case h
α : Type u_1
M : Matroid α
B I J✝ X Y : Set α
e : α
hI : M.Indep I
hIX : I ⊆ X
hX : autoParam (X ⊆ M.E) _auto✝
J : Set α
hJmax : ∀ ⦃b : Set α⦄, b ∈ {Y | M.Indep Y ∧ I ⊆ Y ∧ Y ⊆ X} → (fun x x_1 => x ⊆ x_1) J b → (fun x x_1 => x ⊆ x_1) b J
hJ : M.Indep J
hIJ : I ⊆ J
hJX : J ⊆ X
⊢ ∀ (J_1 : Set α), M.Indep J_1 → J ⊆ J_1 → J_1 ⊆ X → J = J_1
state_after: no goals
tactic: exact fun K hK hJK hKX ↦ hJK.antisymm (hJmax ⟨hK, hIJ.trans hJK, hKX⟩ hJK)
Theorem: ZMod.cast_neg_one
File: Mathlib/Data/ZMod/Basic.lean

Proof steps:
state_before: m n✝ : ℕ
R : Type u_1
inst✝ : Ring R
n : ℕ
⊢ (-1).cast = ↑n - 1
state_after: case zero
m n : ℕ
R : Type u_1
inst✝ : Ring R
⊢ (-1).cast = ↑0 - 1

case succ
m n✝ : ℕ
R : Type u_1
inst✝ : Ring R
n : ℕ
⊢ (-1).cast = ↑(n + 1) - 1
tactic: cases' n with n
Theorem: LieSubmodule.subsingleton_iff
File: Mathlib/Algebra/Lie/Submodule.lean

Proof steps:
state_before: R : Type u
L : Type v
M : 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
N N' : LieSubmodule R L M
I J : LieIdeal R L
⊢ Subsingleton (LieSubmodule R L M) ↔ Subsingleton (Submodule R M)
state_after: no goals
tactic: rw [← subsingleton_iff_bot_eq_top, ← subsingleton_iff_bot_eq_top, ← coe_toSubmodule_eq_iff,
      top_coeSubmodule, bot_coeSubmodule]
Theorem: CategoryTheory.Limits.Pi.reindex_hom_π
File: Mathlib/CategoryTheory/Limits/Shapes/Products.lean

Proof steps:
state_before: β : Type w
α : Type w₂
γ✝ : Type w₃
C : Type u
inst✝² : Category.{v, u} C
γ : Type w'
ε : β ≃ γ
f : γ → C
inst✝¹ : HasProduct f
inst✝ : HasProduct (f ∘ ⇑ε)
b : β
⊢ (reindex ε f).hom ≫ π f (ε b) = π (f ∘ ⇑ε) b
state_after: β : Type w
α : Type w₂
γ✝ : Type w₃
C : Type u
inst✝² : Category.{v, u} C
γ : Type w'
ε : β ≃ γ
f : γ → C
inst✝¹ : HasProduct f
inst✝ : HasProduct (f ∘ ⇑ε)
b : β
⊢ (HasLimit.isoOfEquivalence (Discrete.equivalence ε) (Discrete.natIso fun x => Iso.refl (f (ε x.as)))).hom ≫
      π f (ε b) =
    π (f ∘ ⇑ε) b
tactic: dsimp [Pi.reindex]
state_before: β : Type w
α : Type w₂
γ✝ : Type w₃
C : Type u
inst✝² : Category.{v, u} C
γ : Type w'
ε : β ≃ γ
f : γ → C
inst✝¹ : HasProduct f
inst✝ : HasProduct (f ∘ ⇑ε)
b : β
⊢ (HasLimit.isoOfEquivalence (Discrete.equivalence ε) (Discrete.natIso fun x => Iso.refl (f (ε x.as)))).hom ≫
      π f (ε b) =
    π (f ∘ ⇑ε) b
state_after: β : Type w
α : Type w₂
γ✝ : Type w₃
C : Type u
inst✝² : Category.{v, u} C
γ : Type w'
ε : β ≃ γ
f : γ → C
inst✝¹ : HasProduct f
inst✝ : HasProduct (f ∘ ⇑ε)
b : β
⊢ limit.π (Discrete.functor (f ∘ ⇑ε)) { as := ε.symm (ε b) } ≫
      (Discrete.functor f).map ((Discrete.equivalence ε).counit.app { as := ε b }) =
    π (f ∘ ⇑ε) b
tactic: simp only [HasLimit.isoOfEquivalence_hom_π, Discrete.equivalence_inverse, Discrete.functor_obj,
    Function.comp_apply, Functor.id_obj, Discrete.equivalence_functor, Functor.comp_obj,
    Discrete.natIso_inv_app, Iso.refl_inv, Category.id_comp]
state_before: β : Type w
α : Type w₂
γ✝ : Type w₃
C : Type u
inst✝² : Category.{v, u} C
γ : Type w'
ε : β ≃ γ
f : γ → C
inst✝¹ : HasProduct f
inst✝ : HasProduct (f ∘ ⇑ε)
b : β
⊢ limit.π (Discrete.functor (f ∘ ⇑ε)) { as := ε.symm (ε b) } ≫
      (Discrete.functor f).map ((Discrete.equivalence ε).counit.app { as := ε b }) =
    π (f ∘ ⇑ε) b
state_after: no goals
tactic: exact limit.w (Discrete.functor (f ∘ ε)) (Discrete.eqToHom' (ε.symm_apply_apply b))
Theorem: List.self_mem_range_succ
File: .lake/packages/batteries/Batteries/Data/List/Lemmas.lean

Proof steps:
state_before: n : Nat
⊢ n ∈ range (n + 1)
state_after: no goals
tactic: simp
Theorem: CofiniteTopology.nhds_eq
File: Mathlib/Topology/Constructions.lean

Proof steps:
state_before: X : Type u
Y : Type v
Z : Type u_1
W : Type u_2
ε : Type u_3
ζ : Type u_4
x : CofiniteTopology X
⊢ 𝓝 x = pure x ⊔ cofinite
state_after: case h
X : Type u
Y : Type v
Z : Type u_1
W : Type u_2
ε : Type u_3
ζ : Type u_4
x : CofiniteTopology X
U : Set (CofiniteTopology X)
⊢ U ∈ 𝓝 x ↔ U ∈ pure x ⊔ cofinite
tactic: ext U
state_before: case h
X : Type u
Y : Type v
Z : Type u_1
W : Type u_2
ε : Type u_3
ζ : Type u_4
x : CofiniteTopology X
U : Set (CofiniteTopology X)
⊢ U ∈ 𝓝 x ↔ U ∈ pure x ⊔ cofinite
state_after: case h
X : Type u
Y : Type v
Z : Type u_1
W : Type u_2
ε : Type u_3
ζ : Type u_4
x : CofiniteTopology X
U : Set (CofiniteTopology X)
⊢ (∃ t ⊆ U, IsOpen t ∧ x ∈ t) ↔ U ∈ pure x ⊔ cofinite
tactic: rw [mem_nhds_iff]
state_before: case h
X : Type u
Y : Type v
Z : Type u_1
W : Type u_2
ε : Type u_3
ζ : Type u_4
x : CofiniteTopology X
U : Set (CofiniteTopology X)
⊢ (∃ t ⊆ U, IsOpen t ∧ x ∈ t) ↔ U ∈ pure x ⊔ cofinite
state_after: case h.mp
X : Type u
Y : Type v
Z : Type u_1
W : Type u_2
ε : Type u_3
ζ : Type u_4
x : CofiniteTopology X
U : Set (CofiniteTopology X)
⊢ (∃ t ⊆ U, IsOpen t ∧ x ∈ t) → U ∈ pure x ⊔ cofinite

case h.mpr
X : Type u
Y : Type v
Z : Type u_1
W : Type u_2
ε : Type u_3
ζ : Type u_4
x : CofiniteTopology X
U : Set (CofiniteTopology X)
⊢ U ∈ pure x ⊔ cofinite → ∃ t ⊆ U, IsOpen t ∧ x ∈ t
tactic: constructor
Theorem: MonotoneOn.mapsTo_Ici
File: Mathlib/Order/Interval/Set/Image.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
f : α → β
inst✝¹ : Preorder α
inst✝ : Preorder β
a b : α
h : MonotoneOn f (Ici a)
x✝¹ : α
x✝ : x✝¹ ∈ Ici a
⊢ f x✝¹ ∈ Ici (f a)
state_after: no goals
tactic: aesop
Theorem: FirstOrder.Language.Structure.cg_iff
File: Mathlib/ModelTheory/FinitelyGenerated.lean

Proof steps:
state_before: L : Language
M : Type u_1
inst✝ : L.Structure M
⊢ CG L M ↔ ∃ S, S.Countable ∧ (closure L).toFun S = ⊤
state_after: no goals
tactic: rw [cg_def, Substructure.cg_def]
Theorem: SimpleGraph.LocallyLinear.map
File: Mathlib/Combinatorics/SimpleGraph/Triangle/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
f : α ↪ β
hG : G.LocallyLinear
⊢ (SimpleGraph.map f G).LocallyLinear
state_after: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
f : α ↪ β
hG : G.LocallyLinear
⊢ ∀ ⦃x y : β⦄, (SimpleGraph.map f G).Adj x y → ∃ s, (SimpleGraph.map f G).IsNClique 3 s ∧ x ∈ s ∧ y ∈ s
tactic: refine ⟨hG.1.map _, ?_⟩
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
f : α ↪ β
hG : G.LocallyLinear
⊢ ∀ ⦃x y : β⦄, (SimpleGraph.map f G).Adj x y → ∃ s, (SimpleGraph.map f G).IsNClique 3 s ∧ x ∈ s ∧ y ∈ s
state_after: case intro.intro.intro.intro
α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
f : α ↪ β
hG : G.LocallyLinear
a b : α
h : G.Adj a b
⊢ ∃ s, (SimpleGraph.map f G).IsNClique 3 s ∧ f a ∈ s ∧ f b ∈ s
tactic: rintro _ _ ⟨a, b, h, rfl, rfl⟩
state_before: case intro.intro.intro.intro
α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
f : α ↪ β
hG : G.LocallyLinear
a b : α
h : G.Adj a b
⊢ ∃ s, (SimpleGraph.map f G).IsNClique 3 s ∧ f a ∈ s ∧ f b ∈ s
state_after: case intro.intro.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s✝ : Finset α
f : α ↪ β
hG : G.LocallyLinear
a b : α
h : G.Adj a b
s : Finset α
hs : G.IsNClique 3 s
ha : a ∈ s
hb : b ∈ s
⊢ ∃ s, (SimpleGraph.map f G).IsNClique 3 s ∧ f a ∈ s ∧ f b ∈ s
tactic: obtain ⟨s, hs, ha, hb⟩ := hG.2 h
state_before: case intro.intro.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s✝ : Finset α
f : α ↪ β
hG : G.LocallyLinear
a b : α
h : G.Adj a b
s : Finset α
hs : G.IsNClique 3 s
ha : a ∈ s
hb : b ∈ s
⊢ ∃ s, (SimpleGraph.map f G).IsNClique 3 s ∧ f a ∈ s ∧ f b ∈ s
state_after: no goals
tactic: exact ⟨s.map f, hs.map, mem_map_of_mem _ ha, mem_map_of_mem _ hb⟩
Theorem: Part.fix_le
File: Mathlib/Control/LawfulFix.lean

Proof steps:
state_before: α✝ : Type u_1
β : α✝ → Type u_2
α : Type u_3
f : ((a : α✝) → Part (β a)) →o (a : α✝) → Part (β a)
X : (a : α✝) → Part (β a)
hX : f X ≤ X
⊢ Part.fix ⇑f ≤ X
state_after: α✝ : Type u_1
β : α✝ → Type u_2
α : Type u_3
f : ((a : α✝) → Part (β a)) →o (a : α✝) → Part (β a)
X : (a : α✝) → Part (β a)
hX : f X ≤ X
⊢ ωSup (approxChain f) ≤ X
tactic: rw [fix_eq_ωSup f]
state_before: α✝ : Type u_1
β : α✝ → Type u_2
α : Type u_3
f : ((a : α✝) → Part (β a)) →o (a : α✝) → Part (β a)
X : (a : α✝) → Part (β a)
hX : f X ≤ X
⊢ ωSup (approxChain f) ≤ X
state_after: α✝ : Type u_1
β : α✝ → Type u_2
α : Type u_3
f : ((a : α✝) → Part (β a)) →o (a : α✝) → Part (β a)
X : (a : α✝) → Part (β a)
hX : f X ≤ X
⊢ ∀ (i : ℕ), (approxChain f) i ≤ X
tactic: apply ωSup_le _ _ _
state_before: α✝ : Type u_1
β : α✝ → Type u_2
α : Type u_3
f : ((a : α✝) → Part (β a)) →o (a : α✝) → Part (β a)
X : (a : α✝) → Part (β a)
hX : f X ≤ X
⊢ ∀ (i : ℕ), (approxChain f) i ≤ X
state_after: α✝ : Type u_1
β : α✝ → Type u_2
α : Type u_3
f : ((a : α✝) → Part (β a)) →o (a : α✝) → Part (β a)
X : (a : α✝) → Part (β a)
hX : f X ≤ X
⊢ ∀ (i : ℕ), { toFun := approx ⇑f, monotone' := ⋯ } i ≤ X
tactic: simp only [Fix.approxChain, OrderHom.coe_mk]
state_before: α✝ : Type u_1
β : α✝ → Type u_2
α : Type u_3
f : ((a : α✝) → Part (β a)) →o (a : α✝) → Part (β a)
X : (a : α✝) → Part (β a)
hX : f X ≤ X
⊢ ∀ (i : ℕ), { toFun := approx ⇑f, monotone' := ⋯ } i ≤ X
state_after: α✝ : Type u_1
β : α✝ → Type u_2
α : Type u_3
f : ((a : α✝) → Part (β a)) →o (a : α✝) → Part (β a)
X : (a : α✝) → Part (β a)
hX : f X ≤ X
i : ℕ
⊢ { toFun := approx ⇑f, monotone' := ⋯ } i ≤ X
tactic: intro i
Theorem: Ideal.quotientMap_comp_mk
File: Mathlib/RingTheory/Ideal/QuotientOperations.lean

Proof steps:
state_before: R : Type u
S✝ : Type v
F : Type w
inst✝⁷ : CommRing R
inst✝⁶ : Semiring S✝
R₁ : Type u_1
R₂ : Type u_2
A : Type u_3
B : Type u_4
inst✝⁵ : CommSemiring R₁
inst✝⁴ : CommSemiring R₂
inst✝³ : CommRing A
inst✝² : Algebra R₁ A
inst✝¹ : Algebra R₂ A
S : Type v
inst✝ : CommRing S
J : Ideal R
I : Ideal S
f : R →+* S
H : J ≤ comap f I
x : R
⊢ ((quotientMap I f H).comp (Quotient.mk J)) x = ((Quotient.mk I).comp f) x
state_after: no goals
tactic: simp only [Function.comp_apply, RingHom.coe_comp, Ideal.quotientMap_mk]