1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: DirectSum.Gmodule.smulAddMonoidHom_apply_of_of
File: Mathlib/Algebra/Module/GradedModule.lean

tactic: simp [smulAddMonoidHom]
state_before: ιA : Type u_1
ιB : Type u_2
A : ιA → Type u_3
M : ιB → Type u_4
inst✝⁷ : AddMonoid ιA
inst✝⁶ : VAdd ιA ιB
inst✝⁵ : (i : ιA) → AddCommMonoid (A i)
inst✝⁴ : (i : ιB) → AddCommMonoid (M i)
inst✝³ : DecidableEq ιA
inst✝² : DecidableEq ιB
inst✝¹ : GMonoid A
inst✝ : Gmodule A M
i : ιA
j : ιB
x : A i
y : M j
⊢ ((smulAddMonoidHom A M) ((of A i) x)) ((of M j) y) = (of M (i +ᵥ j)) (GSMul.smul x y)
state_after: no goals
Theorem: Ordinal.principal_mul_one
File: Mathlib/SetTheory/Ordinal/Principal.lean

tactic: rw [principal_one_iff]
state_before: ⊢ Principal (fun x x_1 => x * x_1) 1
state_after: ⊢ 0 * 0 = 0

tactic: exact zero_mul _
state_before: ⊢ 0 * 0 = 0
state_after: no goals
Theorem: Con.smul
File: Mathlib/GroupTheory/Congruence/Basic.lean

tactic: simpa only [smul_one_mul] using c.mul (c.refl' (a • (1 : M) : M)) h
state_before: M✝ : Type u_1
N : Type u_2
P : Type u_3
α : Type u_4
M : Type u_5
inst✝² : MulOneClass M
inst✝¹ : SMul α M
inst✝ : IsScalarTower α M M
c : Con M
a : α
w x : M
h : c w x
⊢ c (a • w) (a • x)
state_after: no goals
Theorem: Real.arccos_of_one_le
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Inverse.lean

tactic: rw [arccos, arcsin_of_one_le hx, sub_self]
state_before: x✝ y x : ℝ
hx : 1 ≤ x
⊢ arccos x = 0
state_after: no goals
Theorem: Finset.univ_filter_mem_range
File: Mathlib/Data/Fintype/Basic.lean

tactic: letI : DecidablePred (fun y => ∃ x, f x = y) := by simpa using ‹_›
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝³ : Fintype α
s t : Finset α
f : α → β
inst✝² : Fintype β
inst✝¹ : DecidablePred fun y => y ∈ Set.range f
inst✝ : DecidableEq β
⊢ filter (fun y => y ∈ Set.range f) univ = image f univ
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝³ : Fintype α
s t : Finset α
f : α → β
inst✝² : Fintype β
inst✝¹ : DecidablePred fun y => y ∈ Set.range f
inst✝ : DecidableEq β
this : DecidablePred fun y => ∃ x, f x = y := inst✝¹
⊢ filter (fun y => y ∈ Set.range f) univ = image f univ

tactic: exact univ_filter_exists f
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝³ : Fintype α
s t : Finset α
f : α → β
inst✝² : Fintype β
inst✝¹ : DecidablePred fun y => y ∈ Set.range f
inst✝ : DecidableEq β
this : DecidablePred fun y => ∃ x, f x = y := inst✝¹
⊢ filter (fun y => y ∈ Set.range f) univ = image f univ
state_after: no goals

tactic: simpa using ‹_›
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝³ : Fintype α
s t : Finset α
f : α → β
inst✝² : Fintype β
inst✝¹ : DecidablePred fun y => y ∈ Set.range f
inst✝ : DecidableEq β
⊢ DecidablePred fun y => ∃ x, f x = y
state_after: no goals
Theorem: SimplicialObject.Split.congr_F
File: Mathlib/AlgebraicTopology/SplitSimplicialObject.lean

tactic: rw [h]
state_before: C : Type u_1
inst✝ : Category.{u_2, u_1} C
S₁ S₂ : Split C
Φ₁ Φ₂ : S₁ ⟶ S₂
h : Φ₁ = Φ₂
⊢ Φ₁.f = Φ₂.f
state_after: no goals
Theorem: half_add_self
File: Mathlib/Algebra/CharZero/Lemmas.lean

tactic: rw [← mul_two, mul_div_cancel_right₀ a two_ne_zero]
state_before: R : Type u_1
inst✝¹ : DivisionRing R
inst✝ : CharZero R
a : R
⊢ (a + a) / 2 = a
state_after: no goals
Theorem: List.forall_map_iff
File: Mathlib/Data/List/Basic.lean

tactic: induction l <;> simp [*]
state_before: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
p✝ q : α → Prop
l : List α
p : β → Prop
f : α → β
⊢ Forall p (map f l) ↔ Forall (p ∘ f) l
state_after: no goals
Theorem: Polynomial.Chebyshev.T_natAbs
File: Mathlib/RingTheory/Polynomial/Chebyshev.lean

tactic: obtain h | h := Int.natAbs_eq n <;> nth_rw 2 [h]
state_before: R : Type u_1
S : Type u_2
inst✝¹ : CommRing R
inst✝ : CommRing S
n : ℤ
⊢ T R ↑n.natAbs = T R n
state_after: case inr
R : Type u_1
S : Type u_2
inst✝¹ : CommRing R
inst✝ : CommRing S
n : ℤ
h : n = -↑n.natAbs
⊢ T R ↑n.natAbs = T R (-↑n.natAbs)

tactic: simp
state_before: case inr
R : Type u_1
S : Type u_2
inst✝¹ : CommRing R
inst✝ : CommRing S
n : ℤ
h : n = -↑n.natAbs
⊢ T R ↑n.natAbs = T R (-↑n.natAbs)
state_after: no goals
Theorem: Representation.averageMap_id
File: Mathlib/RepresentationTheory/Invariants.lean

tactic: rw [mem_invariants] at hv
state_before: k : Type u_1
G : Type u_2
V : Type u_3
inst✝⁵ : CommSemiring k
inst✝⁴ : Group G
inst✝³ : AddCommMonoid V
inst✝² : Module k V
ρ : Representation k G V
inst✝¹ : Fintype G
inst✝ : Invertible ↑(Fintype.card G)
v : V
hv : v ∈ ρ.invariants
⊢ ρ.averageMap v = v
state_after: k : Type u_1
G : Type u_2
V : Type u_3
inst✝⁵ : CommSemiring k
inst✝⁴ : Group G
inst✝³ : AddCommMonoid V
inst✝² : Module k V
ρ : Representation k G V
inst✝¹ : Fintype G
inst✝ : Invertible ↑(Fintype.card G)
v : V
hv : ∀ (g : G), (ρ g) v = v
⊢ ρ.averageMap v = v

tactic: simp [average, map_sum, hv, Finset.card_univ, nsmul_eq_smul_cast k _ v, smul_smul]
state_before: k : Type u_1
G : Type u_2
V : Type u_3
inst✝⁵ : CommSemiring k
inst✝⁴ : Group G
inst✝³ : AddCommMonoid V
inst✝² : Module k V
ρ : Representation k G V
inst✝¹ : Fintype G
inst✝ : Invertible ↑(Fintype.card G)
v : V
hv : ∀ (g : G), (ρ g) v = v
⊢ ρ.averageMap v = v
state_after: no goals
Theorem: Set.pi_eq_empty
File: Mathlib/Data/Set/Prod.lean

tactic: ext f
state_before: ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i : ι
hs : i ∈ s
ht : t i = ∅
⊢ s.pi t = ∅
state_after: case h
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i : ι
hs : i ∈ s
ht : t i = ∅
f : (i : ι) → α i
⊢ f ∈ s.pi t ↔ f ∈ ∅

tactic: simp only [mem_empty_iff_false, not_forall, iff_false_iff, mem_pi, Classical.not_imp]
state_before: case h
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i : ι
hs : i ∈ s
ht : t i = ∅
f : (i : ι) → α i
⊢ f ∈ s.pi t ↔ f ∈ ∅
state_after: case h
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i : ι
hs : i ∈ s
ht : t i = ∅
f : (i : ι) → α i
⊢ ∃ x, ∃ (_ : x ∈ s), f x ∉ t x

tactic: exact ⟨i, hs, by simp [ht]⟩
state_before: case h
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i : ι
hs : i ∈ s
ht : t i = ∅
f : (i : ι) → α i
⊢ ∃ x, ∃ (_ : x ∈ s), f x ∉ t x
state_after: no goals

tactic: simp [ht]
state_before: ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i : ι
hs : i ∈ s
ht : t i = ∅
f : (i : ι) → α i
⊢ f i ∉ t i
state_after: no goals
Theorem: Finset.Ioo_subset_Ioc_self
File: Mathlib/Order/Interval/Finset/Basic.lean

tactic: rw [← coe_subset, coe_Ioo, coe_Ioc]
state_before: ι : Type u_1
α : Type u_2
inst✝¹ : Preorder α
inst✝ : LocallyFiniteOrder α
a a₁ a₂ b b₁ b₂ c x : α
⊢ Ioo a b ⊆ Ioc a b
state_after: ι : Type u_1
α : Type u_2
inst✝¹ : Preorder α
inst✝ : LocallyFiniteOrder α
a a₁ a₂ b b₁ b₂ c x : α
⊢ Set.Ioo a b ⊆ Set.Ioc a b

tactic: exact Set.Ioo_subset_Ioc_self
state_before: ι : Type u_1
α : Type u_2
inst✝¹ : Preorder α
inst✝ : LocallyFiniteOrder α
a a₁ a₂ b b₁ b₂ c x : α
⊢ Set.Ioo a b ⊆ Set.Ioc a b
state_after: no goals
Theorem: Ideal.span_singleton_pow
File: Mathlib/RingTheory/Ideal/Operations.lean

tactic: induction' n with n ih
state_before: R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
s : R
n : ℕ
⊢ span {s} ^ n = span {s ^ n}
state_after: case zero
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
s : R
⊢ span {s} ^ 0 = span {s ^ 0}

case succ
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
s : R
n : ℕ
ih : span {s} ^ n = span {s ^ n}
⊢ span {s} ^ (n + 1) = span {s ^ (n + 1)}

tactic: simp only [pow_succ, ih, span_singleton_mul_span_singleton]
state_before: case succ
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
s : R
n : ℕ
ih : span {s} ^ n = span {s ^ n}
⊢ span {s} ^ (n + 1) = span {s ^ (n + 1)}
state_after: no goals

tactic: simp [Set.singleton_one]
state_before: case zero
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
s : R
⊢ span {s} ^ 0 = span {s ^ 0}
state_after: no goals
Theorem: AddConstMapClass.map_add_nat'
File: Mathlib/Algebra/AddConstMap/Basic.lean

tactic: simp [← map_add_nsmul]
state_before: F : Type u_1
G : Type u_2
H : Type u_3
inst✝³ : FunLike F G H
a : G
b : H
inst✝² : AddMonoidWithOne G
inst✝¹ : AddMonoid H
inst✝ : AddConstMapClass F G H 1 b
f : F
x : G
n : ℕ
⊢ f (x + ↑n) = f x + n • b
state_after: no goals
Theorem: OrderIso.toRelIsoLT_ofRelIsoLT
File: Mathlib/Order/Hom/Basic.lean

tactic: ext
state_before: F : Type u_1
α✝ : Type u_2
β✝ : Type u_3
γ : Type u_4
δ : Type u_5
inst✝⁴ : Preorder α✝
inst✝³ : Preorder β✝
inst✝² : Preorder γ
α : Type u_6
β : Type u_7
inst✝¹ : PartialOrder α
inst✝ : PartialOrder β
e : (fun x x_1 => x < x_1) ≃r fun x x_1 => x < x_1
⊢ (ofRelIsoLT e).toRelIsoLT = e
state_after: case h
F : Type u_1
α✝ : Type u_2
β✝ : Type u_3
γ : Type u_4
δ : Type u_5
inst✝⁴ : Preorder α✝
inst✝³ : Preorder β✝
inst✝² : Preorder γ
α : Type u_6
β : Type u_7
inst✝¹ : PartialOrder α
inst✝ : PartialOrder β
e : (fun x x_1 => x < x_1) ≃r fun x x_1 => x < x_1
x✝ : α
⊢ (ofRelIsoLT e).toRelIsoLT x✝ = e x✝

tactic: simp
state_before: case h
F : Type u_1
α✝ : Type u_2
β✝ : Type u_3
γ : Type u_4
δ : Type u_5
inst✝⁴ : Preorder α✝
inst✝³ : Preorder β✝
inst✝² : Preorder γ
α : Type u_6
β : Type u_7
inst✝¹ : PartialOrder α
inst✝ : PartialOrder β
e : (fun x x_1 => x < x_1) ≃r fun x x_1 => x < x_1
x✝ : α
⊢ (ofRelIsoLT e).toRelIsoLT x✝ = e x✝
state_after: no goals
Theorem: Set.countable_iUnion
File: Mathlib/Data/Set/Countable.lean

tactic: have := fun i ↦ (ht i).to_subtype
state_before: α : Type u
β : Type v
γ : Type w
ι : Sort x
t : ι → Set α
inst✝ : Countable ι
ht : ∀ (i : ι), (t i).Countable
⊢ (⋃ i, t i).Countable
state_after: α : Type u
β : Type v
γ : Type w
ι : Sort x
t : ι → Set α
inst✝ : Countable ι
ht : ∀ (i : ι), (t i).Countable
this : ∀ (i : ι), Countable ↑(t i)
⊢ (⋃ i, t i).Countable

tactic: rw [iUnion_eq_range_psigma]
state_before: α : Type u
β : Type v
γ : Type w
ι : Sort x
t : ι → Set α
inst✝ : Countable ι
ht : ∀ (i : ι), (t i).Countable
this : ∀ (i : ι), Countable ↑(t i)
⊢ (⋃ i, t i).Countable
state_after: α : Type u
β : Type v
γ : Type w
ι : Sort x
t : ι → Set α
inst✝ : Countable ι
ht : ∀ (i : ι), (t i).Countable
this : ∀ (i : ι), Countable ↑(t i)
⊢ (range fun a => ↑a.snd).Countable

tactic: apply countable_range
state_before: α : Type u
β : Type v
γ : Type w
ι : Sort x
t : ι → Set α
inst✝ : Countable ι
ht : ∀ (i : ι), (t i).Countable
this : ∀ (i : ι), Countable ↑(t i)
⊢ (range fun a => ↑a.snd).Countable
state_after: no goals
Theorem: Finset.disjoint_range_addRightEmbedding
File: Mathlib/Data/Finset/Image.lean

tactic: simp [disjoint_left]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
f : α ↪ β
s : Finset α
a b : ℕ
⊢ _root_.Disjoint (range a) (map (addRightEmbedding a) (range b))
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
f : α ↪ β
s : Finset α
a b : ℕ
⊢ ∀ ⦃a_1 : ℕ⦄, a_1 < a → ∀ x < b, ¬x + a = a_1

tactic: omega
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
f : α ↪ β
s : Finset α
a b : ℕ
⊢ ∀ ⦃a_1 : ℕ⦄, a_1 < a → ∀ x < b, ¬x + a = a_1
state_after: no goals
Theorem: contMDiffOn_iff_contDiffOn
File: Mathlib/Geometry/Manifold/ContMDiff/NormedSpace.lean

tactic: simp [contMDiffWithinAt_iff_contDiffWithinAt]
state_before: 𝕜 : Type u_1
inst✝³² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝³¹ : NormedAddCommGroup E
inst✝³⁰ : NormedSpace 𝕜 E
H : Type u_3
inst✝²⁹ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
M : Type u_4
inst✝²⁸ : TopologicalSpace M
inst✝²⁷ : ChartedSpace H M
inst✝²⁶ : SmoothManifoldWithCorners I M
E' : Type u_5
inst✝²⁵ : NormedAddCommGroup E'
inst✝²⁴ : NormedSpace 𝕜 E'
H' : Type u_6
inst✝²³ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E' H'
M' : Type u_7
inst✝²² : TopologicalSpace M'
inst✝²¹ : ChartedSpace H' M'
inst✝²⁰ : SmoothManifoldWithCorners I' M'
F : Type u_8
inst✝¹⁹ : NormedAddCommGroup F
inst✝¹⁸ : NormedSpace 𝕜 F
G : Type u_9
inst✝¹⁷ : TopologicalSpace G
J : ModelWithCorners 𝕜 F G
N : Type u_10
inst✝¹⁶ : TopologicalSpace N
inst✝¹⁵ : ChartedSpace G N
inst✝¹⁴ : SmoothManifoldWithCorners J N
F' : Type u_11
inst✝¹³ : NormedAddCommGroup F'
inst✝¹² : NormedSpace 𝕜 F'
G' : Type u_12
inst✝¹¹ : TopologicalSpace G'
J' : ModelWithCorners 𝕜 F' G'
N' : Type u_13
inst✝¹⁰ : TopologicalSpace N'
inst✝⁹ : ChartedSpace G' N'
inst✝⁸ : SmoothManifoldWithCorners J' N'
F₁ : Type u_14
inst✝⁷ : NormedAddCommGroup F₁
inst✝⁶ : NormedSpace 𝕜 F₁
F₂ : Type u_15
inst✝⁵ : NormedAddCommGroup F₂
inst✝⁴ : NormedSpace 𝕜 F₂
F₃ : Type u_16
inst✝³ : NormedAddCommGroup F₃
inst✝² : NormedSpace 𝕜 F₃
F₄ : Type u_17
inst✝¹ : NormedAddCommGroup F₄
inst✝ : NormedSpace 𝕜 F₄
f✝ f₁ : M → M'
s✝ t : Set M
x : M
m n : ℕ∞
f : E → E'
s : Set E
⊢ ∀ (a : E), a ∈ s → ContMDiffWithinAt 𝓘(𝕜, E) 𝓘(𝕜, E') n f s a ↔ a ∈ s → ContDiffWithinAt 𝕜 n f s a
state_after: no goals
Theorem: real_inner_smul_self_left
File: Mathlib/Analysis/InnerProductSpace/Basic.lean

tactic: rw [real_inner_smul_left, ← real_inner_self_eq_norm_mul_norm]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
x : F
r : ℝ
⊢ ⟪r • x, x⟫_ℝ = r * (‖x‖ * ‖x‖)
state_after: no goals
Theorem: QPF.Cofix.dest_corec
File: Mathlib/Data/QPF/Univariate/Basic.lean

tactic: conv =>
  lhs
  rw [Cofix.dest, Cofix.corec];
state_before: F : Type u → Type u
q : QPF F
α : Type u
g : α → F α
x : α
⊢ (corec g x).dest = corec g <$> g x
state_after: F : Type u → Type u
q : QPF F
α : Type u
g : α → F α
x : α
⊢ Quot.lift (fun x => Quot.mk Mcongr <$> abs x.dest) ⋯ (Quot.mk Mcongr (corecF g x)) = corec g <$> g x

tactic: dsimp
state_before: F : Type u → Type u
q : QPF F
α : Type u
g : α → F α
x : α
⊢ Quot.lift (fun x => Quot.mk Mcongr <$> abs x.dest) ⋯ (Quot.mk Mcongr (corecF g x)) = corec g <$> g x
state_after: F : Type u → Type u
q : QPF F
α : Type u
g : α → F α
x : α
⊢ Quot.mk Mcongr <$> abs (corecF g x).dest = corec g <$> g x

tactic: rw [corecF_eq, abs_map, abs_repr, ← comp_map]
state_before: F : Type u → Type u
q : QPF F
α : Type u
g : α → F α
x : α
⊢ Quot.mk Mcongr <$> abs (corecF g x).dest = corec g <$> g x
state_after: F : Type u → Type u
q : QPF F
α : Type u
g : α → F α
x : α
⊢ (Quot.mk Mcongr ∘ corecF g) <$> g x = corec g <$> g x

tactic: rfl
state_before: F : Type u → Type u
q : QPF F
α : Type u
g : α → F α
x : α
⊢ (Quot.mk Mcongr ∘ corecF g) <$> g x = corec g <$> g x
state_after: no goals
Theorem: CategoryTheory.isIso_of_hom_comp_eq_id
File: Mathlib/CategoryTheory/Iso.lean

tactic: rw [(hom_comp_eq_id _).mp h]
state_before: C : Type u
inst✝¹ : Category.{v, u} C
X Y Z : C
g : X ⟶ Y
inst✝ : IsIso g
f : Y ⟶ X
h : g ≫ f = 𝟙 X
⊢ IsIso f
state_after: C : Type u
inst✝¹ : Category.{v, u} C
X Y Z : C
g : X ⟶ Y
inst✝ : IsIso g
f : Y ⟶ X
h : g ≫ f = 𝟙 X
⊢ IsIso (inv g)

tactic: infer_instance
state_before: C : Type u
inst✝¹ : Category.{v, u} C
X Y Z : C
g : X ⟶ Y
inst✝ : IsIso g
f : Y ⟶ X
h : g ≫ f = 𝟙 X
⊢ IsIso (inv g)
state_after: no goals
Theorem: PosNum.pred'_to_nat
File: Mathlib/Data/Num/Lemmas.lean

tactic: rw [pred'_to_nat n, Nat.succ_pred_eq_of_pos (to_nat_pos n)]
state_before: α : Type u_1
n : PosNum
⊢ (↑n.pred').succ = ↑n
state_after: no goals

tactic: rw [← to_nat_inj.1 h]
state_before: α : Type u_1
n : PosNum
this : (↑n.pred').succ = ↑n
h : ↑1 = ↑n
⊢ ↑(Num.casesOn 0 1 bit1) = (_root_.bit0 ↑n).pred
state_after: α : Type u_1
n : PosNum
this : (↑n.pred').succ = ↑n
h : ↑1 = ↑n
⊢ ↑(Num.casesOn 0 1 bit1) = (_root_.bit0 ↑1).pred

tactic: rfl
state_before: α : Type u_1
n : PosNum
this : (↑n.pred').succ = ↑n
h : ↑1 = ↑n
⊢ ↑(Num.casesOn 0 1 bit1) = (_root_.bit0 ↑1).pred
state_after: no goals

tactic: rw [← h]
state_before: α : Type u_1
n : PosNum
this : (↑n.pred').succ = ↑n
p : PosNum
h : (↑p).succ = ↑n
⊢ ↑(Num.casesOn (pos p) 1 bit1) = (_root_.bit0 ↑n).pred
state_after: α : Type u_1
n : PosNum
this : (↑n.pred').succ = ↑n
p : PosNum
h : (↑p).succ = ↑n
⊢ ↑(Num.casesOn (pos p) 1 bit1) = (_root_.bit0 (↑p).succ).pred

tactic: exact (Nat.succ_add p p).symm
state_before: α : Type u_1
n : PosNum
this : (↑n.pred').succ = ↑n
p : PosNum
h : (↑p).succ = ↑n
⊢ ↑(Num.casesOn (pos p) 1 bit1) = (_root_.bit0 (↑p).succ).pred
state_after: no goals
Theorem: Set.EqOn.cancel_right
File: Mathlib/Data/Set/Function.lean

tactic: intro b hb
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
s s₁ s₂ : Set α
t t₁ t₂ : Set β
p : Set γ
f f₁ f₂ f₃ : α → β
g g₁ g₂ : β → γ
f' f₁' f₂' : β → α
g' : γ → β
a : α
b : β
hf : EqOn (g₁ ∘ f) (g₂ ∘ f) s
hf' : SurjOn f s t
⊢ EqOn g₁ g₂ t
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
s s₁ s₂ : Set α
t t₁ t₂ : Set β
p : Set γ
f f₁ f₂ f₃ : α → β
g g₁ g₂ : β → γ
f' f₁' f₂' : β → α
g' : γ → β
a : α
b✝ : β
hf : EqOn (g₁ ∘ f) (g₂ ∘ f) s
hf' : SurjOn f s t
b : β
hb : b ∈ t
⊢ g₁ b = g₂ b

tactic: obtain ⟨a, ha, rfl⟩ := hf' hb
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
s s₁ s₂ : Set α
t t₁ t₂ : Set β
p : Set γ
f f₁ f₂ f₃ : α → β
g g₁ g₂ : β → γ
f' f₁' f₂' : β → α
g' : γ → β
a : α
b✝ : β
hf : EqOn (g₁ ∘ f) (g₂ ∘ f) s
hf' : SurjOn f s t
b : β
hb : b ∈ t
⊢ g₁ b = g₂ b
state_after: case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
s s₁ s₂ : Set α
t t₁ t₂ : Set β
p : Set γ
f f₁ f₂ f₃ : α → β
g g₁ g₂ : β → γ
f' f₁' f₂' : β → α
g' : γ → β
a✝ : α
b : β
hf : EqOn (g₁ ∘ f) (g₂ ∘ f) s
hf' : SurjOn f s t
a : α
ha : a ∈ s
hb : f a ∈ t
⊢ g₁ (f a) = g₂ (f a)

tactic: exact hf ha
state_before: case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
s s₁ s₂ : Set α
t t₁ t₂ : Set β
p : Set γ
f f₁ f₂ f₃ : α → β
g g₁ g₂ : β → γ
f' f₁' f₂' : β → α
g' : γ → β
a✝ : α
b : β
hf : EqOn (g₁ ∘ f) (g₂ ∘ f) s
hf' : SurjOn f s t
a : α
ha : a ∈ s
hb : f a ∈ t
⊢ g₁ (f a) = g₂ (f a)
state_after: no goals
Theorem: List.sublistsLenAux_append
File: Mathlib/Data/List/Sublists.lean

tactic: unfold sublistsLenAux
state_before: α : Type u
β : Type v
γ : Type w
l : List α
f : List α → β
g : β → γ
r : List β
s : List γ
⊢ sublistsLenAux 0 l (g ∘ f) (map g r ++ s) = map g (sublistsLenAux 0 l f r) ++ s
state_after: α : Type u
β : Type v
γ : Type w
l : List α
f : List α → β
g : β → γ
r : List β
s : List γ
⊢ (g ∘ f) [] :: (map g r ++ s) = map g (f [] :: r) ++ s

tactic: simp
state_before: α : Type u
β : Type v
γ : Type w
l : List α
f : List α → β
g : β → γ
r : List β
s : List γ
⊢ (g ∘ f) [] :: (map g r ++ s) = map g (f [] :: r) ++ s
state_after: no goals

tactic: unfold sublistsLenAux
state_before: α : Type u
β : Type v
γ : Type w
n : ℕ
a : α
l : List α
f : List α → β
g : β → γ
r : List β
s : List γ
⊢ sublistsLenAux (n + 1) (a :: l) (g ∘ f) (map g r ++ s) = map g (sublistsLenAux (n + 1) (a :: l) f r) ++ s
state_after: α : Type u
β : Type v
γ : Type w
n : ℕ
a : α
l : List α
f : List α → β
g : β → γ
r : List β
s : List γ
⊢ sublistsLenAux (n + 1) l (g ∘ f) (sublistsLenAux n l ((g ∘ f) ∘ cons a) (map g r ++ s)) =
    map g (sublistsLenAux (n + 1) l f (sublistsLenAux n l (f ∘ cons a) r)) ++ s

tactic: simp only [show (g ∘ f) ∘ List.cons a = g ∘ f ∘ List.cons a by rfl, sublistsLenAux_append,
  sublistsLenAux_append]
state_before: α : Type u
β : Type v
γ : Type w
n : ℕ
a : α
l : List α
f : List α → β
g : β → γ
r : List β
s : List γ
⊢ sublistsLenAux (n + 1) l (g ∘ f) (sublistsLenAux n l ((g ∘ f) ∘ cons a) (map g r ++ s)) =
    map g (sublistsLenAux (n + 1) l f (sublistsLenAux n l (f ∘ cons a) r)) ++ s
state_after: no goals

tactic: rfl
state_before: α : Type u
β : Type v
γ : Type w
n : ℕ
a : α
l : List α
f : List α → β
g : β → γ
r : List β
s : List γ
⊢ (g ∘ f) ∘ cons a = g ∘ f ∘ cons a
state_after: no goals
Theorem: Set.image_image2_distrib_left
File: Mathlib/Data/Set/NAry.lean

tactic: rw [image_id']
state_before: α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
ζ : Type u_11
ζ' : Type u_12
ν : Type u_13
f f'✝ : α → β → γ
g✝ g'✝ : α → β → γ → δ
s s' : Set α
t t' : Set β
u u' : Set γ
v : Set δ
a a' : α
b b' : β
c c' : γ
d d' : δ
g : γ → δ
f' : α' → β → δ
g' : α → α'
h_distrib : ∀ (a : α) (b : β), g (f a b) = f' (g' a) b
⊢ image2 f' (g' '' s) ((fun b => b) '' t) = image2 f' (g' '' s) t
state_after: no goals
Theorem: Polynomial.degree_C_lt_degree_C_mul_X
File: Mathlib/Algebra/Polynomial/Degree/Definitions.lean

tactic: simpa only [degree_C_mul_X ha] using degree_C_lt
state_before: R : Type u
S : Type v
a b c d : R
n m : ℕ
inst✝ : Semiring R
p✝ p q : R[X]
ι : Type u_1
ha : a ≠ 0
⊢ (C b).degree < (C a * X).degree
state_after: no goals
Theorem: Set.Finite.toFinset_union
File: Mathlib/Data/Set/Finite.lean

tactic: ext
state_before: α : Type u
β : Type v
ι : Sort w
γ : Type x
s t : Set α
a : α
hs✝ : s.Finite
ht✝ : t.Finite
inst✝ : DecidableEq α
hs : s.Finite
ht : t.Finite
h : (s ∪ t).Finite
⊢ h.toFinset = hs.toFinset ∪ ht.toFinset
state_after: case a
α : Type u
β : Type v
ι : Sort w
γ : Type x
s t : Set α
a : α
hs✝ : s.Finite
ht✝ : t.Finite
inst✝ : DecidableEq α
hs : s.Finite
ht : t.Finite
h : (s ∪ t).Finite
a✝ : α
⊢ a✝ ∈ h.toFinset ↔ a✝ ∈ hs.toFinset ∪ ht.toFinset

tactic: simp
state_before: case a
α : Type u
β : Type v
ι : Sort w
γ : Type x
s t : Set α
a : α
hs✝ : s.Finite
ht✝ : t.Finite
inst✝ : DecidableEq α
hs : s.Finite
ht : t.Finite
h : (s ∪ t).Finite
a✝ : α
⊢ a✝ ∈ h.toFinset ↔ a✝ ∈ hs.toFinset ∪ ht.toFinset
state_after: no goals