1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: PiNat.disjoint_cylinder_of_longestPrefix_lt
File: Mathlib/Topology/MetricSpace/PiNat.lean

tactic: contrapose! hn
state_before: E : ℕ → Type u_1
inst✝¹ : (n : ℕ) → TopologicalSpace (E n)
inst✝ : ∀ (n : ℕ), DiscreteTopology (E n)
s : Set ((n : ℕ) → E n)
hs : IsClosed s
x : (n : ℕ) → E n
hx : x ∉ s
n : ℕ
hn : longestPrefix x s < n
⊢ Disjoint s (cylinder x n)
state_after: E : ℕ → Type u_1
inst✝¹ : (n : ℕ) → TopologicalSpace (E n)
inst✝ : ∀ (n : ℕ), DiscreteTopology (E n)
s : Set ((n : ℕ) → E n)
hs : IsClosed s
x : (n : ℕ) → E n
hx : x ∉ s
n : ℕ
hn : ¬Disjoint s (cylinder x n)
⊢ n ≤ longestPrefix x s

tactic: rcases not_disjoint_iff_nonempty_inter.1 hn with ⟨y, ys, hy⟩
state_before: E : ℕ → Type u_1
inst✝¹ : (n : ℕ) → TopologicalSpace (E n)
inst✝ : ∀ (n : ℕ), DiscreteTopology (E n)
s : Set ((n : ℕ) → E n)
hs : IsClosed s
x : (n : ℕ) → E n
hx : x ∉ s
n : ℕ
hn : ¬Disjoint s (cylinder x n)
⊢ n ≤ longestPrefix x s
state_after: case intro.intro
E : ℕ → Type u_1
inst✝¹ : (n : ℕ) → TopologicalSpace (E n)
inst✝ : ∀ (n : ℕ), DiscreteTopology (E n)
s : Set ((n : ℕ) → E n)
hs : IsClosed s
x : (n : ℕ) → E n
hx : x ∉ s
n : ℕ
hn : ¬Disjoint s (cylinder x n)
y : (n : ℕ) → E n
ys : y ∈ s
hy : y ∈ cylinder x n
⊢ n ≤ longestPrefix x s

tactic: apply le_trans _ (firstDiff_le_longestPrefix hs hx ys)
state_before: case intro.intro
E : ℕ → Type u_1
inst✝¹ : (n : ℕ) → TopologicalSpace (E n)
inst✝ : ∀ (n : ℕ), DiscreteTopology (E n)
s : Set ((n : ℕ) → E n)
hs : IsClosed s
x : (n : ℕ) → E n
hx : x ∉ s
n : ℕ
hn : ¬Disjoint s (cylinder x n)
y : (n : ℕ) → E n
ys : y ∈ s
hy : y ∈ cylinder x n
⊢ n ≤ longestPrefix x s
state_after: E : ℕ → Type u_1
inst✝¹ : (n : ℕ) → TopologicalSpace (E n)
inst✝ : ∀ (n : ℕ), DiscreteTopology (E n)
s : Set ((n : ℕ) → E n)
hs : IsClosed s
x : (n : ℕ) → E n
hx : x ∉ s
n : ℕ
hn : ¬Disjoint s (cylinder x n)
y : (n : ℕ) → E n
ys : y ∈ s
hy : y ∈ cylinder x n
⊢ n ≤ firstDiff x y

tactic: apply (mem_cylinder_iff_le_firstDiff (ne_of_mem_of_not_mem ys hx).symm _).1
state_before: E : ℕ → Type u_1
inst✝¹ : (n : ℕ) → TopologicalSpace (E n)
inst✝ : ∀ (n : ℕ), DiscreteTopology (E n)
s : Set ((n : ℕ) → E n)
hs : IsClosed s
x : (n : ℕ) → E n
hx : x ∉ s
n : ℕ
hn : ¬Disjoint s (cylinder x n)
y : (n : ℕ) → E n
ys : y ∈ s
hy : y ∈ cylinder x n
⊢ n ≤ firstDiff x y
state_after: E : ℕ → Type u_1
inst✝¹ : (n : ℕ) → TopologicalSpace (E n)
inst✝ : ∀ (n : ℕ), DiscreteTopology (E n)
s : Set ((n : ℕ) → E n)
hs : IsClosed s
x : (n : ℕ) → E n
hx : x ∉ s
n : ℕ
hn : ¬Disjoint s (cylinder x n)
y : (n : ℕ) → E n
ys : y ∈ s
hy : y ∈ cylinder x n
⊢ x ∈ cylinder y n

tactic: rwa [mem_cylinder_comm]
state_before: E : ℕ → Type u_1
inst✝¹ : (n : ℕ) → TopologicalSpace (E n)
inst✝ : ∀ (n : ℕ), DiscreteTopology (E n)
s : Set ((n : ℕ) → E n)
hs : IsClosed s
x : (n : ℕ) → E n
hx : x ∉ s
n : ℕ
hn : ¬Disjoint s (cylinder x n)
y : (n : ℕ) → E n
ys : y ∈ s
hy : y ∈ cylinder x n
⊢ x ∈ cylinder y n
state_after: no goals
Theorem: Filter.Tendsto.atTop_zsmul_neg_const
File: Mathlib/Order/Filter/Archimedean.lean

tactic: simpa using hf.atTop_zsmul_const (neg_pos.2 hr)
state_before: α : Type u_1
R : Type u_2
l : Filter α
f✝ : α → R
r : R
inst✝¹ : LinearOrderedAddCommGroup R
inst✝ : Archimedean R
f : α → ℤ
hr : r < 0
hf : Tendsto f l atTop
⊢ Tendsto (fun x => f x • r) l atBot
state_after: no goals
Theorem: Finset.codisjoint_left
File: Mathlib/Data/Fintype/Basic.lean

tactic: classical simp [codisjoint_iff, eq_univ_iff_forall, or_iff_not_imp_left]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : Fintype α
s t : Finset α
⊢ Codisjoint s t ↔ ∀ ⦃a : α⦄, a ∉ s → a ∈ t
state_after: no goals

tactic: simp [codisjoint_iff, eq_univ_iff_forall, or_iff_not_imp_left]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : Fintype α
s t : Finset α
⊢ Codisjoint s t ↔ ∀ ⦃a : α⦄, a ∉ s → a ∈ t
state_after: no goals
Theorem: Ordinal.lt_add_of_limit
File: Mathlib/SetTheory/Ordinal/Arithmetic.lean

tactic: rw [← IsNormal.bsup_eq.{u, u} (add_isNormal b) h, lt_bsup, bex_def]
state_before: a b c : Ordinal.{u}
h : c.IsLimit
⊢ a < b + c ↔ ∃ c' < c, a < b + c'
state_after: no goals
Theorem: Equiv.sumCongr_refl
File: Mathlib/Logic/Equiv/Basic.lean

tactic: ext i
state_before: α : Type u_1
β : Type u_2
⊢ (Equiv.refl α).sumCongr (Equiv.refl β) = Equiv.refl (α ⊕ β)
state_after: case H
α : Type u_1
β : Type u_2
i : α ⊕ β
⊢ ((Equiv.refl α).sumCongr (Equiv.refl β)) i = (Equiv.refl (α ⊕ β)) i

tactic: cases i <;> rfl
state_before: case H
α : Type u_1
β : Type u_2
i : α ⊕ β
⊢ ((Equiv.refl α).sumCongr (Equiv.refl β)) i = (Equiv.refl (α ⊕ β)) i
state_after: no goals
Theorem: Subsemigroup.subsingleton_of_subsingleton
File: Mathlib/Algebra/Group/Subsemigroup/Basic.lean

tactic: constructor
state_before: M : Type u_1
N : Type u_2
A : Type u_3
inst✝² : Mul M
s : Set M
inst✝¹ : Add A
t : Set A
S : Subsemigroup M
inst✝ : Subsingleton (Subsemigroup M)
⊢ Subsingleton M
state_after: case allEq
M : Type u_1
N : Type u_2
A : Type u_3
inst✝² : Mul M
s : Set M
inst✝¹ : Add A
t : Set A
S : Subsemigroup M
inst✝ : Subsingleton (Subsemigroup M)
⊢ ∀ (a b : M), a = b

tactic: intro x y
state_before: case allEq
M : Type u_1
N : Type u_2
A : Type u_3
inst✝² : Mul M
s : Set M
inst✝¹ : Add A
t : Set A
S : Subsemigroup M
inst✝ : Subsingleton (Subsemigroup M)
⊢ ∀ (a b : M), a = b
state_after: case allEq
M : Type u_1
N : Type u_2
A : Type u_3
inst✝² : Mul M
s : Set M
inst✝¹ : Add A
t : Set A
S : Subsemigroup M
inst✝ : Subsingleton (Subsemigroup M)
x y : M
⊢ x = y

tactic: have : ∀ a : M, a ∈ (⊥ : Subsemigroup M) := by simp [Subsingleton.elim (⊥ : Subsemigroup M) ⊤]
state_before: case allEq
M : Type u_1
N : Type u_2
A : Type u_3
inst✝² : Mul M
s : Set M
inst✝¹ : Add A
t : Set A
S : Subsemigroup M
inst✝ : Subsingleton (Subsemigroup M)
x y : M
⊢ x = y
state_after: case allEq
M : Type u_1
N : Type u_2
A : Type u_3
inst✝² : Mul M
s : Set M
inst✝¹ : Add A
t : Set A
S : Subsemigroup M
inst✝ : Subsingleton (Subsemigroup M)
x y : M
this : ∀ (a : M), a ∈ ⊥
⊢ x = y

tactic: exact absurd (this x) not_mem_bot
state_before: case allEq
M : Type u_1
N : Type u_2
A : Type u_3
inst✝² : Mul M
s : Set M
inst✝¹ : Add A
t : Set A
S : Subsemigroup M
inst✝ : Subsingleton (Subsemigroup M)
x y : M
this : ∀ (a : M), a ∈ ⊥
⊢ x = y
state_after: no goals

tactic: simp [Subsingleton.elim (⊥ : Subsemigroup M) ⊤]
state_before: M : Type u_1
N : Type u_2
A : Type u_3
inst✝² : Mul M
s : Set M
inst✝¹ : Add A
t : Set A
S : Subsemigroup M
inst✝ : Subsingleton (Subsemigroup M)
x y : M
⊢ ∀ (a : M), a ∈ ⊥
state_after: no goals
Theorem: Finset.mulSupport_prod
File: Mathlib/Algebra/BigOperators/Group/Finset.lean

tactic: simp only [mulSupport_subset_iff', Set.mem_iUnion, not_exists, nmem_mulSupport]
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✝ : CommMonoid β
s : Finset ι
f : ι → α → β
⊢ (mulSupport fun x => ∏ i ∈ s, f i x) ⊆ ⋃ i ∈ s, mulSupport (f i)
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✝ : CommMonoid β
s : Finset ι
f : ι → α → β
⊢ ∀ (x : α), (∀ x_1 ∈ s, f x_1 x = 1) → ∏ i ∈ s, f i x = 1

tactic: exact fun x ↦ prod_eq_one
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✝ : CommMonoid β
s : Finset ι
f : ι → α → β
⊢ ∀ (x : α), (∀ x_1 ∈ s, f x_1 x = 1) → ∏ i ∈ s, f i x = 1
state_after: no goals
Theorem: Nat.log_of_one_lt_of_le
File: Mathlib/Data/Nat/Log.lean

tactic: rw [log]
state_before: b n : ℕ
h : 1 < b
hn : b ≤ n
⊢ log b n = log b (n / b) + 1
state_after: b n : ℕ
h : 1 < b
hn : b ≤ n
⊢ (if h : b ≤ n ∧ 1 < b then log b (n / b) + 1 else 0) = log b (n / b) + 1

tactic: exact if_pos ⟨hn, h⟩
state_before: b n : ℕ
h : 1 < b
hn : b ≤ n
⊢ (if h : b ≤ n ∧ 1 < b then log b (n / b) + 1 else 0) = log b (n / b) + 1
state_after: no goals
Theorem: SubgroupClass.coe_inclusion
File: Mathlib/Algebra/Group/Subgroup/Basic.lean

tactic: cases a
state_before: G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁷ : Group G
inst✝⁶ : Group G'
inst✝⁵ : Group G''
A : Type u_4
inst✝⁴ : AddGroup A
M : Type u_5
S : Type u_6
inst✝³ : DivInvMonoid M
inst✝² : SetLike S M
hSM : SubgroupClass S M
H✝ K✝ : S
inst✝¹ : SetLike S G
inst✝ : SubgroupClass S G
H K : S
h : H ≤ K
a : ↥H
⊢ ↑((inclusion h) a) = ↑a
state_after: case mk
G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁷ : Group G
inst✝⁶ : Group G'
inst✝⁵ : Group G''
A : Type u_4
inst✝⁴ : AddGroup A
M : Type u_5
S : Type u_6
inst✝³ : DivInvMonoid M
inst✝² : SetLike S M
hSM : SubgroupClass S M
H✝ K✝ : S
inst✝¹ : SetLike S G
inst✝ : SubgroupClass S G
H K : S
h : H ≤ K
val✝ : G
property✝ : val✝ ∈ H
⊢ ↑((inclusion h) ⟨val✝, property✝⟩) = ↑⟨val✝, property✝⟩

tactic: simp only [inclusion, MonoidHom.mk'_apply]
state_before: case mk
G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁷ : Group G
inst✝⁶ : Group G'
inst✝⁵ : Group G''
A : Type u_4
inst✝⁴ : AddGroup A
M : Type u_5
S : Type u_6
inst✝³ : DivInvMonoid M
inst✝² : SetLike S M
hSM : SubgroupClass S M
H✝ K✝ : S
inst✝¹ : SetLike S G
inst✝ : SubgroupClass S G
H K : S
h : H ≤ K
val✝ : G
property✝ : val✝ ∈ H
⊢ ↑((inclusion h) ⟨val✝, property✝⟩) = ↑⟨val✝, property✝⟩
state_after: no goals
Theorem: Finset.powerset_eq_singleton_empty
File: Mathlib/Data/Finset/Powerset.lean

tactic: rw [← powerset_empty, powerset_inj]
state_before: α : Type u_1
s t : Finset α
⊢ s.powerset = {∅} ↔ s = ∅
state_after: no goals
Theorem: Subspace.dualCoannihilator_top
File: Mathlib/LinearAlgebra/Dual.lean

tactic: rw [dualCoannihilator, dualAnnihilator_top, comap_bot, Module.eval_ker]
state_before: K : Type u
V : Type v
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
W : Subspace K V
⊢ dualCoannihilator ⊤ = ⊥
state_after: no goals
Theorem: PowerSeries.trunc_X
File: Mathlib/RingTheory/PowerSeries/Trunc.lean

tactic: ext d
state_before: R : Type u_1
inst✝ : Semiring R
n : ℕ
⊢ trunc (n + 2) X = Polynomial.X
state_after: case a
R : Type u_1
inst✝ : Semiring R
n d : ℕ
⊢ (trunc (n + 2) X).coeff d = Polynomial.X.coeff d

tactic: rw [coeff_trunc, coeff_X]
state_before: case a
R : Type u_1
inst✝ : Semiring R
n d : ℕ
⊢ (trunc (n + 2) X).coeff d = Polynomial.X.coeff d
state_after: case a
R : Type u_1
inst✝ : Semiring R
n d : ℕ
⊢ (if d < n + 2 then if d = 1 then 1 else 0 else 0) = Polynomial.X.coeff d

tactic: split_ifs with h₁ h₂
state_before: case a
R : Type u_1
inst✝ : Semiring R
n d : ℕ
⊢ (if d < n + 2 then if d = 1 then 1 else 0 else 0) = Polynomial.X.coeff d
state_after: case pos
R : Type u_1
inst✝ : Semiring R
n d : ℕ
h₁ : d < n + 2
h₂ : d = 1
⊢ 1 = Polynomial.X.coeff d

case neg
R : Type u_1
inst✝ : Semiring R
n d : ℕ
h₁ : d < n + 2
h₂ : ¬d = 1
⊢ 0 = Polynomial.X.coeff d

case neg
R : Type u_1
inst✝ : Semiring R
n d : ℕ
h₁ : ¬d < n + 2
⊢ 0 = Polynomial.X.coeff d

tactic: rw [h₂, coeff_X_one]
state_before: case pos
R : Type u_1
inst✝ : Semiring R
n d : ℕ
h₁ : d < n + 2
h₂ : d = 1
⊢ 1 = Polynomial.X.coeff d
state_after: no goals

tactic: rw [coeff_X_of_ne_one h₂]
state_before: case neg
R : Type u_1
inst✝ : Semiring R
n d : ℕ
h₁ : d < n + 2
h₂ : ¬d = 1
⊢ 0 = Polynomial.X.coeff d
state_after: no goals

tactic: rw [coeff_X_of_ne_one]
state_before: case neg
R : Type u_1
inst✝ : Semiring R
n d : ℕ
h₁ : ¬d < n + 2
⊢ 0 = Polynomial.X.coeff d
state_after: case neg
R : Type u_1
inst✝ : Semiring R
n d : ℕ
h₁ : ¬d < n + 2
⊢ d ≠ 1

tactic: intro hd
state_before: case neg
R : Type u_1
inst✝ : Semiring R
n d : ℕ
h₁ : ¬d < n + 2
⊢ d ≠ 1
state_after: case neg
R : Type u_1
inst✝ : Semiring R
n d : ℕ
h₁ : ¬d < n + 2
hd : d = 1
⊢ False

tactic: apply h₁
state_before: case neg
R : Type u_1
inst✝ : Semiring R
n d : ℕ
h₁ : ¬d < n + 2
hd : d = 1
⊢ False
state_after: case neg
R : Type u_1
inst✝ : Semiring R
n d : ℕ
h₁ : ¬d < n + 2
hd : d = 1
⊢ d < n + 2

tactic: rw [hd]
state_before: case neg
R : Type u_1
inst✝ : Semiring R
n d : ℕ
h₁ : ¬d < n + 2
hd : d = 1
⊢ d < n + 2
state_after: case neg
R : Type u_1
inst✝ : Semiring R
n d : ℕ
h₁ : ¬d < n + 2
hd : d = 1
⊢ 1 < n + 2

tactic: exact n.one_lt_succ_succ
state_before: case neg
R : Type u_1
inst✝ : Semiring R
n d : ℕ
h₁ : ¬d < n + 2
hd : d = 1
⊢ 1 < n + 2
state_after: no goals
Theorem: List.Nat.antidiagonalTuple_zero_right
File: Mathlib/Data/Fin/Tuple/NatAntidiagonal.lean

tactic: rw [antidiagonalTuple, antidiagonal_zero, List.bind_singleton, antidiagonalTuple_zero_right k,
  List.map_singleton]
state_before: k : ℕ
⊢ antidiagonalTuple (k + 1) 0 = [0]
state_after: k : ℕ
⊢ [Fin.cons (0, 0).1 0] = [0]

tactic: exact congr_arg (fun x => [x]) Matrix.cons_zero_zero
state_before: k : ℕ
⊢ [Fin.cons (0, 0).1 0] = [0]
state_after: no goals
Theorem: Sublattice.coe_eq_empty
File: Mathlib/Order/Sublattice.lean

tactic: rw [← coe_bot, coe_inj]
state_before: ι : Sort u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝² : Lattice α
inst✝¹ : Lattice β
inst✝ : Lattice γ
L M : Sublattice α
f : LatticeHom α β
s t : Set α
a : α
⊢ ↑L = ∅ ↔ L = ⊥
state_after: no goals
Theorem: groupCohomology.dTwo_comp_dOne
File: Mathlib/RepresentationTheory/GroupCohomology/LowDegree.lean

tactic: show ModuleCat.ofHom (dOne A) ≫ ModuleCat.ofHom (dTwo A) = _
state_before: k G : Type u
inst✝¹ : CommRing k
inst✝ : Group G
A : Rep k G
⊢ dTwo A ∘ₗ dOne A = 0
state_after: k G : Type u
inst✝¹ : CommRing k
inst✝ : Group G
A : Rep k G
⊢ ModuleCat.ofHom (dOne A) ≫ ModuleCat.ofHom (dTwo A) = 0

tactic: have h1 : _ ≫ ModuleCat.ofHom (dOne A) = _ ≫ _ := congr_arg ModuleCat.ofHom (dOne_comp_eq A)
state_before: k G : Type u
inst✝¹ : CommRing k
inst✝ : Group G
A : Rep k G
⊢ ModuleCat.ofHom (dOne A) ≫ ModuleCat.ofHom (dTwo A) = 0
state_after: k G : Type u
inst✝¹ : CommRing k
inst✝ : Group G
A : Rep k G
h1 : ↑(oneCochainsLequiv A) ≫ ModuleCat.ofHom (dOne A) = (inhomogeneousCochains A).d 1 2 ≫ ↑(twoCochainsLequiv A)
⊢ ModuleCat.ofHom (dOne A) ≫ ModuleCat.ofHom (dTwo A) = 0

tactic: have h2 : _ ≫ ModuleCat.ofHom (dTwo A) = _ ≫ _ := congr_arg ModuleCat.ofHom (dTwo_comp_eq A)
state_before: k G : Type u
inst✝¹ : CommRing k
inst✝ : Group G
A : Rep k G
h1 : ↑(oneCochainsLequiv A) ≫ ModuleCat.ofHom (dOne A) = (inhomogeneousCochains A).d 1 2 ≫ ↑(twoCochainsLequiv A)
⊢ ModuleCat.ofHom (dOne A) ≫ ModuleCat.ofHom (dTwo A) = 0
state_after: k G : Type u
inst✝¹ : CommRing k
inst✝ : Group G
A : Rep k G
h1 : ↑(oneCochainsLequiv A) ≫ ModuleCat.ofHom (dOne A) = (inhomogeneousCochains A).d 1 2 ≫ ↑(twoCochainsLequiv A)
h2 : ↑(twoCochainsLequiv A) ≫ ModuleCat.ofHom (dTwo A) = (inhomogeneousCochains A).d 2 3 ≫ ↑(threeCochainsLequiv A)
⊢ ModuleCat.ofHom (dOne A) ≫ ModuleCat.ofHom (dTwo A) = 0

tactic: simp only [← LinearEquiv.toModuleIso_hom] at h1 h2
state_before: k G : Type u
inst✝¹ : CommRing k
inst✝ : Group G
A : Rep k G
h1 : ↑(oneCochainsLequiv A) ≫ ModuleCat.ofHom (dOne A) = (inhomogeneousCochains A).d 1 2 ≫ ↑(twoCochainsLequiv A)
h2 : ↑(twoCochainsLequiv A) ≫ ModuleCat.ofHom (dTwo A) = (inhomogeneousCochains A).d 2 3 ≫ ↑(threeCochainsLequiv A)
⊢ ModuleCat.ofHom (dOne A) ≫ ModuleCat.ofHom (dTwo A) = 0
state_after: k G : Type u
inst✝¹ : CommRing k
inst✝ : Group G
A : Rep k G
h1 :
  (oneCochainsLequiv A).toModuleIso.hom ≫ ModuleCat.ofHom (dOne A) =
    (inhomogeneousCochains A).d 1 2 ≫ (twoCochainsLequiv A).toModuleIso.hom
h2 :
  (twoCochainsLequiv A).toModuleIso.hom ≫ ModuleCat.ofHom (dTwo A) =
    (inhomogeneousCochains A).d 2 3 ≫ (threeCochainsLequiv A).toModuleIso.hom
⊢ ModuleCat.ofHom (dOne A) ≫ ModuleCat.ofHom (dTwo A) = 0

tactic: simp only [(Iso.eq_inv_comp _).2 h2, (Iso.eq_inv_comp _).2 h1,
  Category.assoc, Iso.hom_inv_id_assoc, HomologicalComplex.d_comp_d_assoc, zero_comp, comp_zero]
state_before: k G : Type u
inst✝¹ : CommRing k
inst✝ : Group G
A : Rep k G
h1 :
  (oneCochainsLequiv A).toModuleIso.hom ≫ ModuleCat.ofHom (dOne A) =
    (inhomogeneousCochains A).d 1 2 ≫ (twoCochainsLequiv A).toModuleIso.hom
h2 :
  (twoCochainsLequiv A).toModuleIso.hom ≫ ModuleCat.ofHom (dTwo A) =
    (inhomogeneousCochains A).d 2 3 ≫ (threeCochainsLequiv A).toModuleIso.hom
⊢ ModuleCat.ofHom (dOne A) ≫ ModuleCat.ofHom (dTwo A) = 0
state_after: no goals
Theorem: Set.inter_biInter
File: Mathlib/Data/Set/Lattice.lean

tactic: rw [inter_comm, ← biInter_inter hs]
state_before: α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι' : Sort u_5
ι₂ : Sort u_6
κ : ι✝ → Sort u_7
κ₁ : ι✝ → Sort u_8
κ₂ : ι✝ → Sort u_9
κ' : ι' → Sort u_10
ι : Type u_11
α : Type u_12
s : Set ι
hs : s.Nonempty
f : ι → Set α
t : Set α
⊢ ⋂ i ∈ s, t ∩ f i = t ∩ ⋂ i ∈ s, f i
state_after: α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι' : Sort u_5
ι₂ : Sort u_6
κ : ι✝ → Sort u_7
κ₁ : ι✝ → Sort u_8
κ₂ : ι✝ → Sort u_9
κ' : ι' → Sort u_10
ι : Type u_11
α : Type u_12
s : Set ι
hs : s.Nonempty
f : ι → Set α
t : Set α
⊢ ⋂ i ∈ s, t ∩ f i = ⋂ i ∈ s, f i ∩ t

tactic: simp [inter_comm]
state_before: α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι' : Sort u_5
ι₂ : Sort u_6
κ : ι✝ → Sort u_7
κ₁ : ι✝ → Sort u_8
κ₂ : ι✝ → Sort u_9
κ' : ι' → Sort u_10
ι : Type u_11
α : Type u_12
s : Set ι
hs : s.Nonempty
f : ι → Set α
t : Set α
⊢ ⋂ i ∈ s, t ∩ f i = ⋂ i ∈ s, f i ∩ t
state_after: no goals
Theorem: Polynomial.eval₂_smul
File: Mathlib/Algebra/Polynomial/Eval.lean

tactic: have A : p.natDegree < p.natDegree.succ := Nat.lt_succ_self _
state_before: R : Type u
S : Type v
T : Type w
ι : Type y
a b : R
m n : ℕ
inst✝¹ : Semiring R
p✝ q r : R[X]
inst✝ : Semiring S
f : R →+* S
x✝ : S
g : R →+* S
p : R[X]
x : S
s : R
⊢ eval₂ g x (s • p) = g s * eval₂ g x p
state_after: R : Type u
S : Type v
T : Type w
ι : Type y
a b : R
m n : ℕ
inst✝¹ : Semiring R
p✝ q r : R[X]
inst✝ : Semiring S
f : R →+* S
x✝ : S
g : R →+* S
p : R[X]
x : S
s : R
A : p.natDegree < p.natDegree.succ
⊢ eval₂ g x (s • p) = g s * eval₂ g x p

tactic: have B : (s • p).natDegree < p.natDegree.succ := (natDegree_smul_le _ _).trans_lt A
state_before: R : Type u
S : Type v
T : Type w
ι : Type y
a b : R
m n : ℕ
inst✝¹ : Semiring R
p✝ q r : R[X]
inst✝ : Semiring S
f : R →+* S
x✝ : S
g : R →+* S
p : R[X]
x : S
s : R
A : p.natDegree < p.natDegree.succ
⊢ eval₂ g x (s • p) = g s * eval₂ g x p
state_after: R : Type u
S : Type v
T : Type w
ι : Type y
a b : R
m n : ℕ
inst✝¹ : Semiring R
p✝ q r : R[X]
inst✝ : Semiring S
f : R →+* S
x✝ : S
g : R →+* S
p : R[X]
x : S
s : R
A : p.natDegree < p.natDegree.succ
B : (s • p).natDegree < p.natDegree.succ
⊢ eval₂ g x (s • p) = g s * eval₂ g x p

tactic: rw [eval₂_eq_sum, eval₂_eq_sum, sum_over_range' _ _ _ A, sum_over_range' _ _ _ B] <;>
  simp [mul_sum, mul_assoc]
state_before: R : Type u
S : Type v
T : Type w
ι : Type y
a b : R
m n : ℕ
inst✝¹ : Semiring R
p✝ q r : R[X]
inst✝ : Semiring S
f : R →+* S
x✝ : S
g : R →+* S
p : R[X]
x : S
s : R
A : p.natDegree < p.natDegree.succ
B : (s • p).natDegree < p.natDegree.succ
⊢ eval₂ g x (s • p) = g s * eval₂ g x p
state_after: no goals
Theorem: FreeCommRing.lift_comp_of
File: Mathlib/RingTheory/FreeCommRing.lean

tactic: rw [RingHom.map_neg, RingHom.map_one, f.map_neg, f.map_one]
state_before: α : Type u
R : Type v
inst✝ : CommRing R
f✝ : α → R
f : FreeCommRing α →+* R
x : FreeCommRing α
⊢ (lift (⇑f ∘ of)) (-1) = f (-1)
state_after: no goals

tactic: rw [RingHom.map_add, f.map_add, ihx, ihy]
state_before: α : Type u
R : Type v
inst✝ : CommRing R
f✝ : α → R
f : FreeCommRing α →+* R
x✝ x y : FreeCommRing α
ihx : (lift (⇑f ∘ of)) x = f x
ihy : (lift (⇑f ∘ of)) y = f y
⊢ (lift (⇑f ∘ of)) (x + y) = f (x + y)
state_after: no goals

tactic: rw [RingHom.map_mul, f.map_mul, ihx, ihy]
state_before: α : Type u
R : Type v
inst✝ : CommRing R
f✝ : α → R
f : FreeCommRing α →+* R
x✝ x y : FreeCommRing α
ihx : (lift (⇑f ∘ of)) x = f x
ihy : (lift (⇑f ∘ of)) y = f y
⊢ (lift (⇑f ∘ of)) (x * y) = f (x * y)
state_after: no goals
Theorem: Padic.coe_inj
File: Mathlib/NumberTheory/Padics/PadicNumbers.lean

tactic: rw [h]
state_before: p : ℕ
inst✝ : Fact (Nat.Prime p)
q r : ℚ
h : q = r
⊢ ↑q = ↑r
state_after: no goals
Theorem: Batteries.AssocList.all_eq
File: .lake/packages/batteries/Batteries/Data/AssocList.lean

tactic: induction l <;> simp [all, *]
state_before: α : Type u_1
β : Type u_2
p : α → β → Bool
l : AssocList α β
⊢ all p l =
    l.toList.all fun x =>
      match x with
      | (a, b) => p a b
state_after: no goals
Theorem: Finsupp.support_update
File: Mathlib/Data/Finsupp/Defs.lean

tactic: classical
dsimp [update]; congr <;> apply Subsingleton.elim
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 : α →₀ M
a : α
b : M
i : α
inst✝¹ : DecidableEq α
inst✝ : DecidableEq M
⊢ (f.update a b).support = if b = 0 then f.support.erase a else insert a f.support
state_after: no goals

tactic: dsimp [update]
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 : α →₀ M
a : α
b : M
i : α
inst✝¹ : DecidableEq α
inst✝ : DecidableEq M
⊢ (f.update a b).support = if b = 0 then f.support.erase a else insert a f.support
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 : α →₀ M
a : α
b : M
i : α
inst✝¹ : DecidableEq α
inst✝ : DecidableEq M
⊢ (if b = 0 then f.support.erase a else insert a f.support) = if b = 0 then f.support.erase a else insert a f.support

tactic: congr <;> apply Subsingleton.elim
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 : α →₀ M
a : α
b : M
i : α
inst✝¹ : DecidableEq α
inst✝ : DecidableEq M
⊢ (if b = 0 then f.support.erase a else insert a f.support) = if b = 0 then f.support.erase a else insert a f.support
state_after: no goals
Theorem: SetTheory.PGame.lf_def
File: Mathlib/SetTheory/Game/PGame.lean

tactic: rw [lf_iff_exists_le]
state_before: xl xr : Type u
x y : PGame
⊢ x ⧏ y ↔
    (∃ i,
        (∀ (i' : x.LeftMoves), x.moveLeft i' ⧏ y.moveLeft i) ∧
          ∀ (j : (y.moveLeft i).RightMoves), x ⧏ (y.moveLeft i).moveRight j) ∨
      ∃ j,
        (∀ (i : (x.moveRight j).LeftMoves), (x.moveRight j).moveLeft i ⧏ y) ∧
          ∀ (j' : y.RightMoves), x.moveRight j ⧏ y.moveRight j'
state_after: xl xr : Type u
x y : PGame
⊢ ((∃ i, x ≤ y.moveLeft i) ∨ ∃ j, x.moveRight j ≤ y) ↔
    (∃ i,
        (∀ (i' : x.LeftMoves), x.moveLeft i' ⧏ y.moveLeft i) ∧
          ∀ (j : (y.moveLeft i).RightMoves), x ⧏ (y.moveLeft i).moveRight j) ∨
      ∃ j,
        (∀ (i : (x.moveRight j).LeftMoves), (x.moveRight j).moveLeft i ⧏ y) ∧
          ∀ (j' : y.RightMoves), x.moveRight j ⧏ y.moveRight j'

tactic: conv =>
  lhs
  simp only [le_iff_forall_lf]
state_before: xl xr : Type u
x y : PGame
⊢ ((∃ i, x ≤ y.moveLeft i) ∨ ∃ j, x.moveRight j ≤ y) ↔
    (∃ i,
        (∀ (i' : x.LeftMoves), x.moveLeft i' ⧏ y.moveLeft i) ∧
          ∀ (j : (y.moveLeft i).RightMoves), x ⧏ (y.moveLeft i).moveRight j) ∨
      ∃ j,
        (∀ (i : (x.moveRight j).LeftMoves), (x.moveRight j).moveLeft i ⧏ y) ∧
          ∀ (j' : y.RightMoves), x.moveRight j ⧏ y.moveRight j'
state_after: no goals