ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: Filter.lift_principal2
File: Mathlib/Order/Filter/Lift.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
f✝ f₁ f₂ : Filter α
g g₁ g₂ : Set α → Filter β
f : Filter α
s : Set α
hs : s ∈ f
⊢ f ≤ 𝓟 s
state_after: no goals
tactic: simp only [hs, le_principal_iff]
Theorem: PNat.le_of_dvd
File: Mathlib/Data/PNat/Basic.lean

Proof steps:
state_before: m n : ℕ+
⊢ m ∣ n → m ≤ n
state_after: m n : ℕ+
⊢ n.mod m = m → m ≤ n
tactic: rw [dvd_iff']
state_before: m n : ℕ+
⊢ n.mod m = m → m ≤ n
state_after: m n : ℕ+
h : n.mod m = m
⊢ m ≤ n
tactic: intro h
state_before: m n : ℕ+
h : n.mod m = m
⊢ m ≤ n
state_after: m n : ℕ+
h : n.mod m = m
⊢ n.mod m ≤ n
tactic: rw [← h]
state_before: m n : ℕ+
h : n.mod m = m
⊢ n.mod m ≤ n
state_after: no goals
tactic: apply (mod_le n m).left
Theorem: CategoryTheory.Monad.algebraFunctorOfMonadHom_obj_a
File: Mathlib/CategoryTheory/Monad/Algebra.lean

Proof steps:
state_before: C : Type u₁
inst✝ : Category.{v₁, u₁} C
T T₁ T₂ : Monad C
h : T₂ ⟶ T₁
A : T₁.Algebra
⊢ T₂.η.app A.A ≫ h.app A.A ≫ A.a = 𝟙 A.A
state_after: no goals
tactic: simp [A.unit]
state_before: C : Type u₁
inst✝ : Category.{v₁, u₁} C
T T₁ T₂ : Monad C
h : T₂ ⟶ T₁
A : T₁.Algebra
⊢ T₂.μ.app A.A ≫ h.app A.A ≫ A.a = T₂.map (h.app A.A ≫ A.a) ≫ h.app A.A ≫ A.a
state_after: no goals
tactic: simp [A.assoc]
Theorem: Fin.heq_fun₂_iff
File: Mathlib/Data/Fin/Basic.lean

Proof steps:
state_before: n m : ℕ
α : Sort u_1
k l k' l' : ℕ
h : k = l
h' : k' = l'
f : Fin k → Fin k' → α
g : Fin l → Fin l' → α
⊢ HEq f g ↔ ∀ (i : Fin k) (j : Fin k'), f i j = g ⟨↑i, ⋯⟩ ⟨↑j, ⋯⟩
state_after: n m : ℕ
α : Sort u_1
k k' l' : ℕ
h' : k' = l'
f : Fin k → Fin k' → α
g : Fin k → Fin l' → α
⊢ HEq f g ↔ ∀ (i : Fin k) (j : Fin k'), f i j = g ⟨↑i, ⋯⟩ ⟨↑j, ⋯⟩
tactic: subst h
state_before: n m : ℕ
α : Sort u_1
k k' l' : ℕ
h' : k' = l'
f : Fin k → Fin k' → α
g : Fin k → Fin l' → α
⊢ HEq f g ↔ ∀ (i : Fin k) (j : Fin k'), f i j = g ⟨↑i, ⋯⟩ ⟨↑j, ⋯⟩
state_after: n m : ℕ
α : Sort u_1
k k' : ℕ
f g : Fin k → Fin k' → α
⊢ HEq f g ↔ ∀ (i : Fin k) (j : Fin k'), f i j = g ⟨↑i, ⋯⟩ ⟨↑j, ⋯⟩
tactic: subst h'
state_before: n m : ℕ
α : Sort u_1
k k' : ℕ
f g : Fin k → Fin k' → α
⊢ HEq f g ↔ ∀ (i : Fin k) (j : Fin k'), f i j = g ⟨↑i, ⋯⟩ ⟨↑j, ⋯⟩
state_after: no goals
tactic: simp [Function.funext_iff]
Theorem: LaurentPolynomial.T_add
File: Mathlib/Algebra/Polynomial/Laurent.lean

Proof steps:
state_before: R : Type u_1
inst✝ : Semiring R
m n : ℤ
⊢ T (m + n) = T m * T n
state_after: no goals
tactic: simp [T, single_mul_single]
Theorem: preimage_smul_setₛₗ_of_units
File: Mathlib/GroupTheory/GroupAction/Pointwise.lean

Proof steps:
state_before: R : Type u_1
S : Type u_2
M : Type u_3
M₁ : Type u_4
M₂ : Type u_5
N : Type u_6
inst✝⁷ : Monoid R
inst✝⁶ : Monoid S
σ : R → S
inst✝⁵ : MulAction R M
inst✝⁴ : MulAction S N
inst✝³ : MulAction R M₁
inst✝² : MulAction R M₂
F : Type u_7
h : F
inst✝¹ : FunLike F M N
inst✝ : MulActionSemiHomClass F σ M N
c : R
s : Set M
t : Set N
hc : IsUnit c
hc' : IsUnit (σ c)
⊢ ⇑h ⁻¹' (σ c • t) = c • ⇑h ⁻¹' t
state_after: case hc
R : Type u_1
S : Type u_2
M : Type u_3
M₁ : Type u_4
M₂ : Type u_5
N : Type u_6
inst✝⁷ : Monoid R
inst✝⁶ : Monoid S
σ : R → S
inst✝⁵ : MulAction R M
inst✝⁴ : MulAction S N
inst✝³ : MulAction R M₁
inst✝² : MulAction R M₂
F : Type u_7
h : F
inst✝¹ : FunLike F M N
inst✝ : MulActionSemiHomClass F σ M N
c : R
s : Set M
t : Set N
hc : IsUnit c
hc' : IsUnit (σ c)
⊢ Function.Surjective fun m => c • m

case hc'
R : Type u_1
S : Type u_2
M : Type u_3
M₁ : Type u_4
M₂ : Type u_5
N : Type u_6
inst✝⁷ : Monoid R
inst✝⁶ : Monoid S
σ : R → S
inst✝⁵ : MulAction R M
inst✝⁴ : MulAction S N
inst✝³ : MulAction R M₁
inst✝² : MulAction R M₂
F : Type u_7
h : F
inst✝¹ : FunLike F M N
inst✝ : MulActionSemiHomClass F σ M N
c : R
s : Set M
t : Set N
hc : IsUnit c
hc' : IsUnit (σ c)
⊢ Function.Injective fun n => σ c • n
tactic: apply preimage_smul_setₛₗ'
Theorem: Real.toNNReal_le_toNNReal_iff_of_pos
File: Mathlib/Data/NNReal/Basic.lean

Proof steps:
state_before: r p : ℝ
hr : 0 < r
⊢ r.toNNReal ≤ p.toNNReal ↔ r ≤ p
state_after: no goals
tactic: simp [toNNReal_le_toNNReal_iff', hr.not_le]
Theorem: Filter.mem_prod_top
File: Mathlib/Order/Filter/Prod.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Sort u_5
s✝ : Set α
t : Set β
f : Filter α
g : Filter β
s : Set (α × β)
⊢ s ∈ f ×ˢ ⊤ ↔ {a | ∀ (b : β), (a, b) ∈ s} ∈ f
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Sort u_5
s✝ : Set α
t : Set β
f : Filter α
g : Filter β
s : Set (α × β)
⊢ {a | ∀ b ∈ univ, (a, b) ∈ s} ∈ f ↔ {a | ∀ (b : β), (a, b) ∈ s} ∈ f
tactic: rw [← principal_univ, mem_prod_principal]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Sort u_5
s✝ : Set α
t : Set β
f : Filter α
g : Filter β
s : Set (α × β)
⊢ {a | ∀ b ∈ univ, (a, b) ∈ s} ∈ f ↔ {a | ∀ (b : β), (a, b) ∈ s} ∈ f
state_after: no goals
tactic: simp only [mem_univ, forall_true_left]
Theorem: AddCommGrp.HasLimit.productLimitCone_isLimit_lift
File: Mathlib/Algebra/Category/Grp/Biproducts.lean

Proof steps:
state_before: J : Type w
f : J → AddCommGrp
s : Cone (Discrete.functor f)
m :
  s.pt ⟶ { pt := of ((j : J) → ↑(f j)), π := Discrete.natTrans fun j => Pi.evalAddMonoidHom (fun j => ↑(f j)) j.as }.pt
w :
  ∀ (j : Discrete J),
    m ≫
        { pt := of ((j : J) → ↑(f j)),
                π := Discrete.natTrans fun j => Pi.evalAddMonoidHom (fun j => ↑(f j)) j.as }.π.app
          j =
      s.π.app j
⊢ m = lift f s
state_after: case w
J : Type w
f : J → AddCommGrp
s : Cone (Discrete.functor f)
m :
  s.pt ⟶ { pt := of ((j : J) → ↑(f j)), π := Discrete.natTrans fun j => Pi.evalAddMonoidHom (fun j => ↑(f j)) j.as }.pt
w :
  ∀ (j : Discrete J),
    m ≫
        { pt := of ((j : J) → ↑(f j)),
                π := Discrete.natTrans fun j => Pi.evalAddMonoidHom (fun j => ↑(f j)) j.as }.π.app
          j =
      s.π.app j
x : ↑s.pt
⊢ m x = (lift f s) x
tactic: ext x
state_before: case w
J : Type w
f : J → AddCommGrp
s : Cone (Discrete.functor f)
m :
  s.pt ⟶ { pt := of ((j : J) → ↑(f j)), π := Discrete.natTrans fun j => Pi.evalAddMonoidHom (fun j => ↑(f j)) j.as }.pt
w :
  ∀ (j : Discrete J),
    m ≫
        { pt := of ((j : J) → ↑(f j)),
                π := Discrete.natTrans fun j => Pi.evalAddMonoidHom (fun j => ↑(f j)) j.as }.π.app
          j =
      s.π.app j
x : ↑s.pt
⊢ m x = (lift f s) x
state_after: case w.h
J : Type w
f : J → AddCommGrp
s : Cone (Discrete.functor f)
m :
  s.pt ⟶ { pt := of ((j : J) → ↑(f j)), π := Discrete.natTrans fun j => Pi.evalAddMonoidHom (fun j => ↑(f j)) j.as }.pt
w :
  ∀ (j : Discrete J),
    m ≫
        { pt := of ((j : J) → ↑(f j)),
                π := Discrete.natTrans fun j => Pi.evalAddMonoidHom (fun j => ↑(f j)) j.as }.π.app
          j =
      s.π.app j
x : ↑s.pt
j : J
⊢ m x j = (lift f s) x j
tactic: funext j
state_before: case w.h
J : Type w
f : J → AddCommGrp
s : Cone (Discrete.functor f)
m :
  s.pt ⟶ { pt := of ((j : J) → ↑(f j)), π := Discrete.natTrans fun j => Pi.evalAddMonoidHom (fun j => ↑(f j)) j.as }.pt
w :
  ∀ (j : Discrete J),
    m ≫
        { pt := of ((j : J) → ↑(f j)),
                π := Discrete.natTrans fun j => Pi.evalAddMonoidHom (fun j => ↑(f j)) j.as }.π.app
          j =
      s.π.app j
x : ↑s.pt
j : J
⊢ m x j = (lift f s) x j
state_after: no goals
tactic: exact congr_arg (fun g : s.pt ⟶ f j => (g : s.pt → f j) x) (w ⟨j⟩)
Theorem: Polynomial.Separable.squarefree
File: Mathlib/FieldTheory/Separable.lean

Proof steps:
state_before: R : Type u
inst✝¹ : CommSemiring R
S : Type v
inst✝ : CommSemiring S
p✝ q : ℕ
p : R[X]
hsep : p.Separable
⊢ Squarefree p
state_after: R : Type u
inst✝¹ : CommSemiring R
S : Type v
inst✝ : CommSemiring S
p✝ q : ℕ
p : R[X]
hsep : p.Separable
⊢ ∀ (x : R[X]), multiplicity x p ≤ 1 ∨ IsUnit x
tactic: rw [multiplicity.squarefree_iff_multiplicity_le_one p]
state_before: R : Type u
inst✝¹ : CommSemiring R
S : Type v
inst✝ : CommSemiring S
p✝ q : ℕ
p : R[X]
hsep : p.Separable
⊢ ∀ (x : R[X]), multiplicity x p ≤ 1 ∨ IsUnit x
state_after: no goals
tactic: exact fun f => or_iff_not_imp_right.mpr fun hunit => multiplicity_le_one_of_separable hunit hsep
Theorem: ofAdd_list_prod
File: Mathlib/Algebra/BigOperators/Group/Finset.lean

Proof steps:
state_before: ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s✝ s₁ s₂ : Finset α
a : α
f g : α → β
inst✝ : AddMonoid α
s : List α
⊢ ofAdd s.sum = (List.map (⇑ofAdd) s).prod
state_after: ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s✝ s₁ s₂ : Finset α
a : α
f g : α → β
inst✝ : AddMonoid α
s : List α
⊢ s.sum = s.prod
tactic: simp [ofAdd]
state_before: ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s✝ s₁ s₂ : Finset α
a : α
f g : α → β
inst✝ : AddMonoid α
s : List α
⊢ s.sum = s.prod
state_after: no goals
tactic: rfl
Theorem: IsNoetherian.iff_fg
File: Mathlib/FieldTheory/Finiteness.lean

Proof steps:
state_before: K : Type u
V : Type v
inst✝² : DivisionRing K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
⊢ IsNoetherian K V ↔ Module.Finite K V
state_after: case mp
K : Type u
V : Type v
inst✝² : DivisionRing K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
⊢ IsNoetherian K V → Module.Finite K V

case mpr
K : Type u
V : Type v
inst✝² : DivisionRing K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
⊢ Module.Finite K V → IsNoetherian K V
tactic: constructor
Theorem: Order.not_isSuccLimit_iff'
File: Mathlib/Order/SuccPred/Limit.lean

Proof steps:
state_before: α : Type u_1
inst✝² : PartialOrder α
inst✝¹ : SuccOrder α
a b : α
C : α → Sort u_2
inst✝ : NoMaxOrder α
⊢ ¬IsSuccLimit a ↔ a ∈ range succ
state_after: α : Type u_1
inst✝² : PartialOrder α
inst✝¹ : SuccOrder α
a b : α
C : α → Sort u_2
inst✝ : NoMaxOrder α
⊢ (∃ x, succ x = a) ↔ a ∈ range succ
tactic: simp_rw [isSuccLimit_iff_succ_ne, not_forall, not_ne_iff]
state_before: α : Type u_1
inst✝² : PartialOrder α
inst✝¹ : SuccOrder α
a b : α
C : α → Sort u_2
inst✝ : NoMaxOrder α
⊢ (∃ x, succ x = a) ↔ a ∈ range succ
state_after: no goals
tactic: rfl
Theorem: CategoryTheory.Sheaf.isDiscrete_iff_mem_essImage'
File: Mathlib/CategoryTheory/Sites/Discrete.lean

Proof steps:
state_before: C : Type u_1
inst✝⁴ : Category.{u_4, u_1} C
J : GrothendieckTopology C
A : Type u_2
inst✝³ : Category.{u_3, u_2} A
inst✝² : HasWeakSheafify J A
inst✝¹ : (constantSheaf J A).Faithful
inst✝ : (constantSheaf J A).Full
t : C
ht : IsTerminal t
L : A ⥤ Sheaf J A
adj : L ⊣ (sheafSections J A).obj (op t)
F : Sheaf J A
⊢ IsDiscrete J ht F ↔ F ∈ L.essImage
state_after: C : Type u_1
inst✝⁴ : Category.{u_4, u_1} C
J : GrothendieckTopology C
A : Type u_2
inst✝³ : Category.{u_3, u_2} A
inst✝² : HasWeakSheafify J A
inst✝¹ : (constantSheaf J A).Faithful
inst✝ : (constantSheaf J A).Full
t : C
ht : IsTerminal t
L : A ⥤ Sheaf J A
adj : L ⊣ (sheafSections J A).obj (op t)
F : Sheaf J A
e : L ≅ constantSheaf J A := adj.leftAdjointUniq (constantSheafAdj J A ht)
⊢ IsDiscrete J ht F ↔ F ∈ L.essImage
tactic: let e : L ≅ constantSheaf J A := adj.leftAdjointUniq (constantSheafAdj _ _ ht)
state_before: C : Type u_1
inst✝⁴ : Category.{u_4, u_1} C
J : GrothendieckTopology C
A : Type u_2
inst✝³ : Category.{u_3, u_2} A
inst✝² : HasWeakSheafify J A
inst✝¹ : (constantSheaf J A).Faithful
inst✝ : (constantSheaf J A).Full
t : C
ht : IsTerminal t
L : A ⥤ Sheaf J A
adj : L ⊣ (sheafSections J A).obj (op t)
F : Sheaf J A
e : L ≅ constantSheaf J A := adj.leftAdjointUniq (constantSheafAdj J A ht)
⊢ IsDiscrete J ht F ↔ F ∈ L.essImage
state_after: case refine_1
C : Type u_1
inst✝⁴ : Category.{u_4, u_1} C
J : GrothendieckTopology C
A : Type u_2
inst✝³ : Category.{u_3, u_2} A
inst✝² : HasWeakSheafify J A
inst✝¹ : (constantSheaf J A).Faithful
inst✝ : (constantSheaf J A).Full
t : C
ht : IsTerminal t
L : A ⥤ Sheaf J A
adj : L ⊣ (sheafSections J A).obj (op t)
F : Sheaf J A
e : L ≅ constantSheaf J A := adj.leftAdjointUniq (constantSheafAdj J A ht)
h : IsDiscrete J ht F
⊢ L.obj (F.val.obj (op t)) ≅ F

case refine_2
C : Type u_1
inst✝⁴ : Category.{u_4, u_1} C
J : GrothendieckTopology C
A : Type u_2
inst✝³ : Category.{u_3, u_2} A
inst✝² : HasWeakSheafify J A
inst✝¹ : (constantSheaf J A).Faithful
inst✝ : (constantSheaf J A).Full
t : C
ht : IsTerminal t
L : A ⥤ Sheaf J A
adj : L ⊣ (sheafSections J A).obj (op t)
F : Sheaf J A
e : L ≅ constantSheaf J A := adj.leftAdjointUniq (constantSheafAdj J A ht)
x✝ : F ∈ L.essImage
Y : A
i : L.obj Y ≅ F
⊢ IsDiscrete J ht F
tactic: refine ⟨fun h ↦ ⟨F.val.obj ⟨t⟩, ⟨?_⟩⟩, fun ⟨Y, ⟨i⟩⟩ ↦ ?_⟩
Theorem: AlgebraicGeometry.Scheme.Pullback.cocycle_snd_fst_fst
File: Mathlib/AlgebraicGeometry/Pullbacks.lean

Proof steps:
state_before: C : Type u
inst✝¹ : Category.{v, u} C
X Y Z : Scheme
𝒰 : X.OpenCover
f : X ⟶ Z
g : Y ⟶ Z
inst✝ : ∀ (i : 𝒰.J), HasPullback (𝒰.map i ≫ f) g
i j k : 𝒰.J
⊢ t' 𝒰 f g i j k ≫
      t' 𝒰 f g j k i ≫
        t' 𝒰 f g k i j ≫
          pullback.snd (fV 𝒰 f g i j) (fV 𝒰 f g i k) ≫
            pullback.fst (pullback.fst (𝒰.map i ≫ f) g ≫ 𝒰.map i) (𝒰.map k) ≫ pullback.fst (𝒰.map i ≫ f) g =
    pullback.snd (fV 𝒰 f g i j) (fV 𝒰 f g i k) ≫
      pullback.fst (pullback.fst (𝒰.map i ≫ f) g ≫ 𝒰.map i) (𝒰.map k) ≫ pullback.fst (𝒰.map i ≫ f) g
state_after: C : Type u
inst✝¹ : Category.{v, u} C
X Y Z : Scheme
𝒰 : X.OpenCover
f : X ⟶ Z
g : Y ⟶ Z
inst✝ : ∀ (i : 𝒰.J), HasPullback (𝒰.map i ≫ f) g
i j k : 𝒰.J
⊢ (t' 𝒰 f g i j k ≫
        t' 𝒰 f g j k i ≫
          t' 𝒰 f g k i j ≫
            pullback.snd (fV 𝒰 f g i j) (fV 𝒰 f g i k) ≫
              pullback.fst (pullback.fst (𝒰.map i ≫ f) g ≫ 𝒰.map i) (𝒰.map k) ≫ pullback.fst (𝒰.map i ≫ f) g) ≫
      𝒰.map i =
    (pullback.snd (fV 𝒰 f g i j) (fV 𝒰 f g i k) ≫
        pullback.fst (pullback.fst (𝒰.map i ≫ f) g ≫ 𝒰.map i) (𝒰.map k) ≫ pullback.fst (𝒰.map i ≫ f) g) ≫
      𝒰.map i
tactic: rw [← cancel_mono (𝒰.map i)]
state_before: C : Type u
inst✝¹ : Category.{v, u} C
X Y Z : Scheme
𝒰 : X.OpenCover
f : X ⟶ Z
g : Y ⟶ Z
inst✝ : ∀ (i : 𝒰.J), HasPullback (𝒰.map i ≫ f) g
i j k : 𝒰.J
⊢ (t' 𝒰 f g i j k ≫
        t' 𝒰 f g j k i ≫
          t' 𝒰 f g k i j ≫
            pullback.snd (fV 𝒰 f g i j) (fV 𝒰 f g i k) ≫
              pullback.fst (pullback.fst (𝒰.map i ≫ f) g ≫ 𝒰.map i) (𝒰.map k) ≫ pullback.fst (𝒰.map i ≫ f) g) ≫
      𝒰.map i =
    (pullback.snd (fV 𝒰 f g i j) (fV 𝒰 f g i k) ≫
        pullback.fst (pullback.fst (𝒰.map i ≫ f) g ≫ 𝒰.map i) (𝒰.map k) ≫ pullback.fst (𝒰.map i ≫ f) g) ≫
      𝒰.map i
state_after: no goals
tactic: simp only [pullback.condition_assoc, t'_snd_fst_fst, t'_fst_snd, t'_snd_snd]
Theorem: Finsupp.comapDomain_support
File: Mathlib/Data/Finsupp/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
M : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
H : Type u_10
R : Type u_11
S : Type u_12
inst✝ : Zero M
f : α → β
l : β →₀ M
hf : Set.InjOn f (f ⁻¹' ↑l.support)
⊢ ∀ (a : α), a ∈ l.support.preimage f hf ↔ (fun a => l (f a)) a ≠ 0
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
M : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
H : Type u_10
R : Type u_11
S : Type u_12
inst✝ : Zero M
f : α → β
l : β →₀ M
hf : Set.InjOn f (f ⁻¹' ↑l.support)
a : α
⊢ a ∈ l.support.preimage f hf ↔ (fun a => l (f a)) a ≠ 0
tactic: intro a
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
M : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
H : Type u_10
R : Type u_11
S : Type u_12
inst✝ : Zero M
f : α → β
l : β →₀ M
hf : Set.InjOn f (f ⁻¹' ↑l.support)
a : α
⊢ a ∈ l.support.preimage f hf ↔ (fun a => l (f a)) a ≠ 0
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
M : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
H : Type u_10
R : Type u_11
S : Type u_12
inst✝ : Zero M
f : α → β
l : β →₀ M
hf : Set.InjOn f (f ⁻¹' ↑l.support)
a : α
⊢ f a ∈ l.support ↔ l (f a) ≠ 0
tactic: simp only [Finset.mem_def.symm, Finset.mem_preimage]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
M : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
H : Type u_10
R : Type u_11
S : Type u_12
inst✝ : Zero M
f : α → β
l : β →₀ M
hf : Set.InjOn f (f ⁻¹' ↑l.support)
a : α
⊢ f a ∈ l.support ↔ l (f a) ≠ 0
state_after: no goals
tactic: exact l.mem_support_toFun (f a)
Theorem: IsSelfAdjoint.inv
File: Mathlib/Algebra/Star/SelfAdjoint.lean

Proof steps:
state_before: R : Type u_1
A : Type u_2
inst✝¹ : DivisionSemiring R
inst✝ : StarRing R
x : R
hx : IsSelfAdjoint x
⊢ IsSelfAdjoint x⁻¹
state_after: no goals
tactic: simp only [isSelfAdjoint_iff, star_inv', hx.star_eq]
Theorem: Set.iUnion_Ioc_left
File: Mathlib/Order/Interval/Set/Disjoint.lean

Proof steps:
state_before: ι : Sort u
α : Type v
β : Type w
inst✝¹ : Preorder α
a b✝ c : α
inst✝ : NoMinOrder α
b : α
⊢ ⋃ a, Ioc a b = Iic b
state_after: no goals
tactic: simp only [← Ioi_inter_Iic, ← iUnion_inter, iUnion_Ioi, univ_inter]
Theorem: Finset.Nat.prod_antidiagonal_succ
File: Mathlib/Algebra/BigOperators/NatAntidiagonal.lean

Proof steps:
state_before: M : Type u_1
N : Type u_2
inst✝¹ : CommMonoid M
inst✝ : AddCommMonoid N
n : ℕ
f : ℕ × ℕ → M
⊢ ∏ p ∈ antidiagonal (n + 1), f p = f (0, n + 1) * ∏ p ∈ antidiagonal n, f (p.1 + 1, p.2)
state_after: M : Type u_1
N : Type u_2
inst✝¹ : CommMonoid M
inst✝ : AddCommMonoid N
n : ℕ
f : ℕ × ℕ → M
⊢ f (0, n + 1) *
      ∏ x ∈ antidiagonal n,
        f (({ toFun := Nat.succ, inj' := Nat.succ_injective }.prodMap (Function.Embedding.refl ℕ)) x) =
    f (0, n + 1) * ∏ p ∈ antidiagonal n, f (p.1 + 1, p.2)
tactic: rw [antidiagonal_succ, prod_cons, prod_map]
state_before: M : Type u_1
N : Type u_2
inst✝¹ : CommMonoid M
inst✝ : AddCommMonoid N
n : ℕ
f : ℕ × ℕ → M
⊢ f (0, n + 1) *
      ∏ x ∈ antidiagonal n,
        f (({ toFun := Nat.succ, inj' := Nat.succ_injective }.prodMap (Function.Embedding.refl ℕ)) x) =
    f (0, n + 1) * ∏ p ∈ antidiagonal n, f (p.1 + 1, p.2)
state_after: no goals
tactic: rfl
Theorem: Stream'.map_cons
File: Mathlib/Data/Stream/Init.lean

Proof steps:
state_before: α : Type u
β : Type v
δ : Type w
f : α → β
a : α
s : Stream' α
⊢ map f (a :: s) = f a :: map f s
state_after: α : Type u
β : Type v
δ : Type w
f : α → β
a : α
s : Stream' α
⊢ (f (a :: s).head :: map f (a :: s).tail).head :: (f (a :: s).head :: map f (a :: s).tail).tail = f a :: map f s
tactic: rw [← Stream'.eta (map f (a::s)), map_eq]
state_before: α : Type u
β : Type v
δ : Type w
f : α → β
a : α
s : Stream' α
⊢ (f (a :: s).head :: map f (a :: s).tail).head :: (f (a :: s).head :: map f (a :: s).tail).tail = f a :: map f s
state_after: no goals
tactic: rfl
Theorem: Set.Finite.induction_to_univ
File: Mathlib/Data/Set/Finite.lean

Proof steps:
state_before: α : Type u
β : Type v
ι : Sort w
γ : Type x
inst✝ : Finite α
C : Set α → Prop
S0 : Set α
H0 : C S0
H1 : ∀ (S : Set α), S ≠ univ → C S → ∃ a ∉ S, C (insert a S)
⊢ ∀ s ⊂ univ, C s → ∃ a ∈ univ \ s, C (insert a s)
state_after: no goals
tactic: simpa [ssubset_univ_iff]
Theorem: Finset.inter_subset_inter
File: Mathlib/Data/Finset/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ s₁ s₂ t✝ t₁ t₂ u v : Finset α
a b : α
x y s t : Finset α
h : x ⊆ y
h' : s ⊆ t
⊢ x ∩ s ⊆ y ∩ t
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ s₁ s₂ t✝ t₁ t₂ u v : Finset α
a✝ b : α
x y s t : Finset α
h : x ⊆ y
h' : s ⊆ t
a : α
a_in : a ∈ x ∩ s
⊢ a ∈ y ∩ t
tactic: intro a a_in
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ s₁ s₂ t✝ t₁ t₂ u v : Finset α
a✝ b : α
x y s t : Finset α
h : x ⊆ y
h' : s ⊆ t
a : α
a_in : a ∈ x ∩ s
⊢ a ∈ y ∩ t
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ s₁ s₂ t✝ t₁ t₂ u v : Finset α
a✝ b : α
x y s t : Finset α
h : x ⊆ y
h' : s ⊆ t
a : α
a_in : a ∈ x ∧ a ∈ s
⊢ a ∈ y ∧ a ∈ t
tactic: rw [Finset.mem_inter] at a_in ⊢
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ s₁ s₂ t✝ t₁ t₂ u v : Finset α
a✝ b : α
x y s t : Finset α
h : x ⊆ y
h' : s ⊆ t
a : α
a_in : a ∈ x ∧ a ∈ s
⊢ a ∈ y ∧ a ∈ t
state_after: no goals
tactic: exact ⟨h a_in.1, h' a_in.2⟩
Theorem: compl_le_of_compl_le
File: Mathlib/Order/BooleanAlgebra.lean

Proof steps:
state_before: α : Type u
β : Type u_1
w x y z : α
inst✝ : BooleanAlgebra α
h : yᶜ ≤ x
⊢ xᶜ ≤ y
state_after: no goals
tactic: simpa only [compl_compl] using compl_le_compl h
Theorem: Finset.piecewise_empty
File: Mathlib/Data/Finset/Piecewise.lean

Proof steps:
state_before: ι : Type u_1
π : ι → Sort u_2
s : Finset ι
f g : (i : ι) → π i
inst✝ : (i : ι) → Decidable (i ∈ ∅)
⊢ ∅.piecewise f g = g
state_after: case h
ι : Type u_1
π : ι → Sort u_2
s : Finset ι
f g : (i : ι) → π i
inst✝ : (i : ι) → Decidable (i ∈ ∅)
i : ι
⊢ ∅.piecewise f g i = g i
tactic: ext i
state_before: case h
ι : Type u_1
π : ι → Sort u_2
s : Finset ι
f g : (i : ι) → π i
inst✝ : (i : ι) → Decidable (i ∈ ∅)
i : ι
⊢ ∅.piecewise f g i = g i
state_after: no goals
tactic: simp [piecewise]
Theorem: Polynomial.dickson_one_one_eq_chebyshev_T
File: Mathlib/RingTheory/Polynomial/Dickson.lean

Proof steps:
state_before: R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
k : ℕ
a : R
inst✝ : Invertible 2
⊢ dickson 1 1 0 = 2 * (Chebyshev.T R ↑0).comp (C ⅟2 * X)
state_after: R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
k : ℕ
a : R
inst✝ : Invertible 2
⊢ 3 - ↑1 = 2 * (Chebyshev.T R ↑0).comp (C ⅟2 * X)
tactic: simp only [Chebyshev.T_zero, mul_one, one_comp, dickson_zero]
state_before: R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
k : ℕ
a : R
inst✝ : Invertible 2
⊢ 3 - ↑1 = 2 * (Chebyshev.T R ↑0).comp (C ⅟2 * X)
state_after: no goals
tactic: norm_num
state_before: R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
k : ℕ
a : R
inst✝ : Invertible 2
⊢ dickson 1 1 1 = 2 * (Chebyshev.T R ↑1).comp (C ⅟2 * X)
state_after: no goals
tactic: rw [dickson_one, Nat.cast_one, Chebyshev.T_one, X_comp, ← mul_assoc, two_mul_C_half_eq_one,
      one_mul]
state_before: R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
k : ℕ
a : R
inst✝ : Invertible 2
n : ℕ
⊢ dickson 1 1 (n + 2) = 2 * (Chebyshev.T R ↑(n + 2)).comp (C ⅟2 * X)
state_after: R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
k : ℕ
a : R
inst✝ : Invertible 2
n : ℕ
⊢ X * (2 * (Chebyshev.T R ↑(n + 1)).comp (C ⅟2 * X)) - 1 * (2 * (Chebyshev.T R ↑n).comp (C ⅟2 * X)) =
    2 * (↑2 * (C ⅟2 * X) * (Chebyshev.T R (↑n + 1)).comp (C ⅟2 * X) - (Chebyshev.T R ↑n).comp (C ⅟2 * X))
tactic: rw [dickson_add_two, C_1, Nat.cast_add, Nat.cast_two, Chebyshev.T_add_two,
      dickson_one_one_eq_chebyshev_T (n + 1), dickson_one_one_eq_chebyshev_T n, sub_comp, mul_comp,
      mul_comp, X_comp, ofNat_comp]
state_before: R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
k : ℕ
a : R
inst✝ : Invertible 2
n : ℕ
⊢ X * (2 * (Chebyshev.T R ↑(n + 1)).comp (C ⅟2 * X)) - 1 * (2 * (Chebyshev.T R ↑n).comp (C ⅟2 * X)) =
    2 * (↑2 * (C ⅟2 * X) * (Chebyshev.T R (↑n + 1)).comp (C ⅟2 * X) - (Chebyshev.T R ↑n).comp (C ⅟2 * X))
state_after: R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
k : ℕ
a : R
inst✝ : Invertible 2
n : ℕ
⊢ X * 2 * (Chebyshev.T R (↑n + 1)).comp (C ⅟2 * X) - 1 * 2 * (Chebyshev.T R ↑n).comp (C ⅟2 * X) =
    2 * (1 * X * (Chebyshev.T R (↑n + 1)).comp (C ⅟2 * X) - (Chebyshev.T R ↑n).comp (C ⅟2 * X))
tactic: simp_rw [← mul_assoc, Nat.cast_ofNat, two_mul_C_half_eq_one, Nat.cast_add, Nat.cast_one]
state_before: R : Type u_1
S : Type u_2
inst✝² : CommRing R
inst✝¹ : CommRing S
k : ℕ
a : R
inst✝ : Invertible 2
n : ℕ
⊢ X * 2 * (Chebyshev.T R (↑n + 1)).comp (C ⅟2 * X) - 1 * 2 * (Chebyshev.T R ↑n).comp (C ⅟2 * X) =
    2 * (1 * X * (Chebyshev.T R (↑n + 1)).comp (C ⅟2 * X) - (Chebyshev.T R ↑n).comp (C ⅟2 * X))
state_after: no goals
tactic: ring
Theorem: Fin.le_castSucc_pred_iff
File: Mathlib/Data/Fin/Basic.lean

Proof steps:
state_before: n m : ℕ
a b : Fin (n + 1)
ha : a ≠ 0
⊢ b ≤ (a.pred ha).castSucc ↔ b < a
state_after: no goals
tactic: rw [castSucc_pred_eq_pred_castSucc, le_pred_castSucc_iff]