1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: Subgroup.map_one_eq_bot
File: Mathlib/Algebra/Group/Subgroup/Basic.lean

tactic: rintro x ⟨y, _, rfl⟩
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
H K : Subgroup G
k : Set G
N : Type u_5
inst✝¹ : Group N
P : Type u_6
inst✝ : Group P
⊢ map 1 K ≤ ⊥
state_after: case intro.intro
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
H K : Subgroup G
k : Set G
N : Type u_5
inst✝¹ : Group N
P : Type u_6
inst✝ : Group P
y : G
left✝ : y ∈ ↑K
⊢ 1 y ∈ ⊥

tactic: simp
state_before: case intro.intro
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
H K : Subgroup G
k : Set G
N : Type u_5
inst✝¹ : Group N
P : Type u_6
inst✝ : Group P
y : G
left✝ : y ∈ ↑K
⊢ 1 y ∈ ⊥
state_after: no goals
Theorem: Submodule.smul_induction_on'
File: Mathlib/RingTheory/Ideal/Operations.lean

tactic: refine Exists.elim ?_ fun (h : x ∈ I • N) (H : p x h) => H
state_before: R : Type u
M : Type v
M' : Type u_1
F : Type u_2
G : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
I J : Ideal R
N P : Submodule R M
x : M
hx : x ∈ I • N
p : (x : M) → x ∈ I • N → Prop
smul : ∀ (r : R) (hr : r ∈ I) (n : M) (hn : n ∈ N), p (r • n) ⋯
add : ∀ (x : M) (hx : x ∈ I • N) (y : M) (hy : y ∈ I • N), p x hx → p y hy → p (x + y) ⋯
⊢ p x hx
state_after: R : Type u
M : Type v
M' : Type u_1
F : Type u_2
G : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
I J : Ideal R
N P : Submodule R M
x : M
hx : x ∈ I • N
p : (x : M) → x ∈ I • N → Prop
smul : ∀ (r : R) (hr : r ∈ I) (n : M) (hn : n ∈ N), p (r • n) ⋯
add : ∀ (x : M) (hx : x ∈ I • N) (y : M) (hy : y ∈ I • N), p x hx → p y hy → p (x + y) ⋯
⊢ ∃ (x_1 : x ∈ I • N), p x x_1

tactic: exact
  smul_induction_on hx (fun a ha x hx => ⟨_, smul _ ha _ hx⟩) fun x y ⟨_, hx⟩ ⟨_, hy⟩ =>
    ⟨_, add _ _ _ _ hx hy⟩
state_before: R : Type u
M : Type v
M' : Type u_1
F : Type u_2
G : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
I J : Ideal R
N P : Submodule R M
x : M
hx : x ∈ I • N
p : (x : M) → x ∈ I • N → Prop
smul : ∀ (r : R) (hr : r ∈ I) (n : M) (hn : n ∈ N), p (r • n) ⋯
add : ∀ (x : M) (hx : x ∈ I • N) (y : M) (hy : y ∈ I • N), p x hx → p y hy → p (x + y) ⋯
⊢ ∃ (x_1 : x ∈ I • N), p x x_1
state_after: no goals
Theorem: EMetric.hausdorffEdist_closure₂
File: Mathlib/Topology/MetricSpace/HausdorffDistance.lean

tactic: simp [@hausdorffEdist_comm _ _ s _]
state_before: ι : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoEMetricSpace α
inst✝ : PseudoEMetricSpace β
x y : α
s t u : Set α
Φ : α → β
⊢ hausdorffEdist s (closure t) = hausdorffEdist s t
state_after: no goals
Theorem: min_le_right
File: Mathlib/Init/Order/LinearOrder.lean

tactic: if h : a ≤ b
then simp [min_def, if_pos h]; exact h
else simp [min_def, if_neg h, le_refl]
state_before: α : Type u
inst✝ : LinearOrder α
a b : α
⊢ min a b ≤ b
state_after: no goals

tactic: simp [min_def, if_pos h]
state_before: α : Type u
inst✝ : LinearOrder α
a b : α
h : a ≤ b
⊢ min a b ≤ b
state_after: α : Type u
inst✝ : LinearOrder α
a b : α
h : a ≤ b
⊢ a ≤ b

tactic: exact h
state_before: α : Type u
inst✝ : LinearOrder α
a b : α
h : a ≤ b
⊢ a ≤ b
state_after: no goals

tactic: simp [min_def, if_neg h, le_refl]
state_before: α : Type u
inst✝ : LinearOrder α
a b : α
h : ¬a ≤ b
⊢ min a b ≤ b
state_after: no goals
Theorem: Module.DualBases.coe_dualBasis
File: Mathlib/LinearAlgebra/Dual.lean

tactic: rw [h.basis.dualBasis_apply_self, h.coe_basis, h.eval, if_congr eq_comm rfl rfl]
state_before: R : Type u_1
M : Type u_2
ι : Type u_3
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
e : ι → M
ε : ι → Dual R M
inst✝¹ : DecidableEq ι
h : DualBases e ε
inst✝ : _root_.Finite ι
i j : ι
⊢ (h.basis.dualBasis i) (h.basis j) = (ε i) (h.basis j)
state_after: no goals
Theorem: PFunctor.Approx.P_corec
File: Mathlib/Data/PFunctor/Univariate/M.lean

tactic: induction' n with n n_ih generalizing i
state_before: F : PFunctor.{u}
X : Type w
f : X → ↑F X
i : X
n : ℕ
⊢ Agree (sCorec f i n) (sCorec f i n.succ)
state_after: case zero
F : PFunctor.{u}
X : Type w
f : X → ↑F X
i : X
⊢ Agree (sCorec f i 0) (sCorec f i (succ 0))

case succ
F : PFunctor.{u}
X : Type w
f : X → ↑F X
n : ℕ
n_ih : ∀ (i : X), Agree (sCorec f i n) (sCorec f i n.succ)
i : X
⊢ Agree (sCorec f i (n + 1)) (sCorec f i (n + 1).succ)

tactic: constructor
state_before: case zero
F : PFunctor.{u}
X : Type w
f : X → ↑F X
i : X
⊢ Agree (sCorec f i 0) (sCorec f i (succ 0))

case succ
F : PFunctor.{u}
X : Type w
f : X → ↑F X
n : ℕ
n_ih : ∀ (i : X), Agree (sCorec f i n) (sCorec f i n.succ)
i : X
⊢ Agree (sCorec f i (n + 1)) (sCorec f i (n + 1).succ)
state_after: case succ
F : PFunctor.{u}
X : Type w
f : X → ↑F X
n : ℕ
n_ih : ∀ (i : X), Agree (sCorec f i n) (sCorec f i n.succ)
i : X
⊢ Agree (sCorec f i (n + 1)) (sCorec f i (n + 1).succ)

tactic: cases' f i with y g
state_before: case succ
F : PFunctor.{u}
X : Type w
f : X → ↑F X
n : ℕ
n_ih : ∀ (i : X), Agree (sCorec f i n) (sCorec f i n.succ)
i : X
⊢ Agree (sCorec f i (n + 1)) (sCorec f i (n + 1).succ)
state_after: case succ.mk
F : PFunctor.{u}
X : Type w
f : X → ↑F X
n : ℕ
n_ih : ∀ (i : X), Agree (sCorec f i n) (sCorec f i n.succ)
i : X
y : F.A
g : F.B y → X
⊢ Agree (sCorec f i (n + 1)) (sCorec f i (n + 1).succ)

tactic: constructor
state_before: case succ.mk
F : PFunctor.{u}
X : Type w
f : X → ↑F X
n : ℕ
n_ih : ∀ (i : X), Agree (sCorec f i n) (sCorec f i n.succ)
i : X
y : F.A
g : F.B y → X
⊢ Agree (sCorec f i (n + 1)) (sCorec f i (n + 1).succ)
state_after: case succ.mk.a
F : PFunctor.{u}
X : Type w
f : X → ↑F X
n : ℕ
n_ih : ∀ (i : X), Agree (sCorec f i n) (sCorec f i n.succ)
i : X
y : F.A
g : F.B y → X
⊢ ∀ (i_1 : F.B (f i).fst), Agree (sCorec f ((f i).snd i_1) n) (sCorec f ((f i).snd i_1) (n + 1))

tactic: introv
state_before: case succ.mk.a
F : PFunctor.{u}
X : Type w
f : X → ↑F X
n : ℕ
n_ih : ∀ (i : X), Agree (sCorec f i n) (sCorec f i n.succ)
i : X
y : F.A
g : F.B y → X
⊢ ∀ (i_1 : F.B (f i).fst), Agree (sCorec f ((f i).snd i_1) n) (sCorec f ((f i).snd i_1) (n + 1))
state_after: case succ.mk.a
F : PFunctor.{u}
X : Type w
f : X → ↑F X
n : ℕ
n_ih : ∀ (i : X), Agree (sCorec f i n) (sCorec f i n.succ)
i✝ : X
y : F.A
g : F.B y → X
i : F.B (f i✝).fst
⊢ Agree (sCorec f ((f i✝).snd i) n) (sCorec f ((f i✝).snd i) (n + 1))

tactic: apply n_ih
state_before: case succ.mk.a
F : PFunctor.{u}
X : Type w
f : X → ↑F X
n : ℕ
n_ih : ∀ (i : X), Agree (sCorec f i n) (sCorec f i n.succ)
i✝ : X
y : F.A
g : F.B y → X
i : F.B (f i✝).fst
⊢ Agree (sCorec f ((f i✝).snd i) n) (sCorec f ((f i✝).snd i) (n + 1))
state_after: no goals
Theorem: Submonoid.LocalizationMap.lift_spec_mul
File: Mathlib/GroupTheory/MonoidLocalization.lean

tactic: erw [mul_comm, ← mul_assoc, mul_inv_left hg, mul_comm]
state_before: M : Type u_1
inst✝² : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝¹ : CommMonoid N
P : Type u_3
inst✝ : CommMonoid P
f : S.LocalizationMap N
g : M →* P
hg : ∀ (y : ↥S), IsUnit (g ↑y)
z : N
w v : P
⊢ (f.lift hg) z * w = v ↔ g (f.sec z).1 * w = g ↑(f.sec z).2 * v
state_after: no goals
Theorem: Submonoid.induction_of_closure_eq_top_right
File: Mathlib/Algebra/Group/Submonoid/Membership.lean

tactic: have : x ∈ closure s := by simp [hs]
state_before: M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : Monoid M
a : M
s : Set M
p : M → Prop
hs : closure s = ⊤
x : M
H1 : p 1
Hmul : ∀ (x y : M), y ∈ s → p x → p (x * y)
⊢ p x
state_after: M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : Monoid M
a : M
s : Set M
p : M → Prop
hs : closure s = ⊤
x : M
H1 : p 1
Hmul : ∀ (x y : M), y ∈ s → p x → p (x * y)
this : x ∈ closure s
⊢ p x

tactic: induction this using closure_induction_right with
| one => exact H1
| mul_right x _ y hy ih => exact Hmul x y hy ih
state_before: M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : Monoid M
a : M
s : Set M
p : M → Prop
hs : closure s = ⊤
x : M
H1 : p 1
Hmul : ∀ (x y : M), y ∈ s → p x → p (x * y)
this : x ∈ closure s
⊢ p x
state_after: no goals

tactic: simp [hs]
state_before: M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : Monoid M
a : M
s : Set M
p : M → Prop
hs : closure s = ⊤
x : M
H1 : p 1
Hmul : ∀ (x y : M), y ∈ s → p x → p (x * y)
⊢ x ∈ closure s
state_after: no goals

tactic: exact H1
state_before: case one
M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : Monoid M
a : M
s : Set M
p : M → Prop
hs : closure s = ⊤
x : M
H1 : p 1
Hmul : ∀ (x y : M), y ∈ s → p x → p (x * y)
⊢ p 1
state_after: no goals

tactic: exact Hmul x y hy ih
state_before: case mul_right
M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : Monoid M
a : M
s : Set M
p : M → Prop
hs : closure s = ⊤
x✝ : M
H1 : p 1
Hmul : ∀ (x y : M), y ∈ s → p x → p (x * y)
x : M
hx✝ : x ∈ closure s
y : M
hy : y ∈ s
ih : p x
⊢ p (x * y)
state_after: no goals
Theorem: List.enumFrom_append
File: Mathlib/Data/List/Enum.lean

tactic: induction' xs with x xs IH generalizing ys n
state_before: α : Type u_1
β : Type u_2
xs ys : List α
n : ℕ
⊢ enumFrom n (xs ++ ys) = enumFrom n xs ++ enumFrom (n + xs.length) ys
state_after: case nil
α : Type u_1
β : Type u_2
ys : List α
n : ℕ
⊢ enumFrom n ([] ++ ys) = enumFrom n [] ++ enumFrom (n + [].length) ys

case cons
α : Type u_1
β : Type u_2
x : α
xs : List α
IH : ∀ (ys : List α) (n : ℕ), enumFrom n (xs ++ ys) = enumFrom n xs ++ enumFrom (n + xs.length) ys
ys : List α
n : ℕ
⊢ enumFrom n (x :: xs ++ ys) = enumFrom n (x :: xs) ++ enumFrom (n + (x :: xs).length) ys

tactic: simp
state_before: case nil
α : Type u_1
β : Type u_2
ys : List α
n : ℕ
⊢ enumFrom n ([] ++ ys) = enumFrom n [] ++ enumFrom (n + [].length) ys
state_after: no goals

tactic: rw [cons_append, enumFrom_cons, IH, ← cons_append, ← enumFrom_cons, length, Nat.add_right_comm,
  Nat.add_assoc]
state_before: case cons
α : Type u_1
β : Type u_2
x : α
xs : List α
IH : ∀ (ys : List α) (n : ℕ), enumFrom n (xs ++ ys) = enumFrom n xs ++ enumFrom (n + xs.length) ys
ys : List α
n : ℕ
⊢ enumFrom n (x :: xs ++ ys) = enumFrom n (x :: xs) ++ enumFrom (n + (x :: xs).length) ys
state_after: no goals
Theorem: mul_div_div_cancel
File: Mathlib/Algebra/Group/Basic.lean

tactic: rw [← div_mul, mul_div_cancel_left]
state_before: α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝ : CommGroup G
a✝ b✝ c✝ d a b c : G
⊢ a * b / (a / c) = b * c
state_after: no goals
Theorem: Finsupp.support_smul_eq
File: Mathlib/Data/Finsupp/Basic.lean

tactic: simp [Finsupp.smul_apply, hb]
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✝³ : Semiring R
inst✝² : AddCommMonoid M
inst✝¹ : Module R M
inst✝ : NoZeroSMulDivisors R M
b : R
hb : b ≠ 0
g : α →₀ M
a : α
⊢ a ∈ (b • g).support ↔ a ∈ g.support
state_after: no goals
Theorem: TruncatedWittVector.card_zmod
File: Mathlib/RingTheory/WittVector/Compare.lean

tactic: rw [card, ZMod.card]
state_before: p : ℕ
hp : Fact (Nat.Prime p)
n : ℕ
R : Type u_1
inst✝ : CommRing R
⊢ Fintype.card (TruncatedWittVector p n (ZMod p)) = p ^ n
state_after: no goals
Theorem: selfZPow_of_nonpos
File: Mathlib/RingTheory/Localization/Away/Basic.lean

tactic: by_cases hn0 : n = 0
state_before: R : Type u_1
inst✝³ : CommRing R
x : R
B : Type u_2
inst✝² : CommRing B
inst✝¹ : Algebra R B
inst✝ : IsLocalization.Away x B
n : ℤ
hn : n ≤ 0
⊢ selfZPow x B n = mk' B 1 (Submonoid.pow x n.natAbs)
state_after: case pos
R : Type u_1
inst✝³ : CommRing R
x : R
B : Type u_2
inst✝² : CommRing B
inst✝¹ : Algebra R B
inst✝ : IsLocalization.Away x B
n : ℤ
hn : n ≤ 0
hn0 : n = 0
⊢ selfZPow x B n = mk' B 1 (Submonoid.pow x n.natAbs)

case neg
R : Type u_1
inst✝³ : CommRing R
x : R
B : Type u_2
inst✝² : CommRing B
inst✝¹ : Algebra R B
inst✝ : IsLocalization.Away x B
n : ℤ
hn : n ≤ 0
hn0 : ¬n = 0
⊢ selfZPow x B n = mk' B 1 (Submonoid.pow x n.natAbs)

tactic: simp [hn0, selfZPow_zero, Submonoid.pow_apply]
state_before: case pos
R : Type u_1
inst✝³ : CommRing R
x : R
B : Type u_2
inst✝² : CommRing B
inst✝¹ : Algebra R B
inst✝ : IsLocalization.Away x B
n : ℤ
hn : n ≤ 0
hn0 : n = 0
⊢ selfZPow x B n = mk' B 1 (Submonoid.pow x n.natAbs)
state_after: no goals

tactic: simp [selfZPow_of_neg _ _ (lt_of_le_of_ne hn hn0)]
state_before: case neg
R : Type u_1
inst✝³ : CommRing R
x : R
B : Type u_2
inst✝² : CommRing B
inst✝¹ : Algebra R B
inst✝ : IsLocalization.Away x B
n : ℤ
hn : n ≤ 0
hn0 : ¬n = 0
⊢ selfZPow x B n = mk' B 1 (Submonoid.pow x n.natAbs)
state_after: no goals
Theorem: AddCircle.isLocalHomeomorph_coe
File: Mathlib/Topology/Instances/AddCircle.lean

tactic: intro a
state_before: 𝕜 : Type u_1
B : Type u_2
inst✝⁵ : LinearOrderedAddCommGroup 𝕜
inst✝⁴ : TopologicalSpace 𝕜
inst✝³ : OrderTopology 𝕜
p : 𝕜
hp : Fact (0 < p)
a : 𝕜
inst✝² : Archimedean 𝕜
x : AddCircle p
hx : x ≠ ↑a
inst✝¹ : DiscreteTopology ↥(zmultiples p)
inst✝ : DenselyOrdered 𝕜
⊢ IsLocalHomeomorph QuotientAddGroup.mk
state_after: 𝕜 : Type u_1
B : Type u_2
inst✝⁵ : LinearOrderedAddCommGroup 𝕜
inst✝⁴ : TopologicalSpace 𝕜
inst✝³ : OrderTopology 𝕜
p : 𝕜
hp : Fact (0 < p)
a✝ : 𝕜
inst✝² : Archimedean 𝕜
x : AddCircle p
hx : x ≠ ↑a✝
inst✝¹ : DiscreteTopology ↥(zmultiples p)
inst✝ : DenselyOrdered 𝕜
a : 𝕜
⊢ ∃ e, a ∈ e.source ∧ QuotientAddGroup.mk = ↑e

tactic: obtain ⟨b, hb1, hb2⟩ := exists_between (sub_lt_self a hp.out)
state_before: 𝕜 : Type u_1
B : Type u_2
inst✝⁵ : LinearOrderedAddCommGroup 𝕜
inst✝⁴ : TopologicalSpace 𝕜
inst✝³ : OrderTopology 𝕜
p : 𝕜
hp : Fact (0 < p)
a✝ : 𝕜
inst✝² : Archimedean 𝕜
x : AddCircle p
hx : x ≠ ↑a✝
inst✝¹ : DiscreteTopology ↥(zmultiples p)
inst✝ : DenselyOrdered 𝕜
a : 𝕜
⊢ ∃ e, a ∈ e.source ∧ QuotientAddGroup.mk = ↑e
state_after: case intro.intro
𝕜 : Type u_1
B : Type u_2
inst✝⁵ : LinearOrderedAddCommGroup 𝕜
inst✝⁴ : TopologicalSpace 𝕜
inst✝³ : OrderTopology 𝕜
p : 𝕜
hp : Fact (0 < p)
a✝ : 𝕜
inst✝² : Archimedean 𝕜
x : AddCircle p
hx : x ≠ ↑a✝
inst✝¹ : DiscreteTopology ↥(zmultiples p)
inst✝ : DenselyOrdered 𝕜
a b : 𝕜
hb1 : a - p < b
hb2 : b < a
⊢ ∃ e, a ∈ e.source ∧ QuotientAddGroup.mk = ↑e

tactic: exact ⟨partialHomeomorphCoe p b, ⟨hb2, lt_add_of_sub_right_lt hb1⟩, rfl⟩
state_before: case intro.intro
𝕜 : Type u_1
B : Type u_2
inst✝⁵ : LinearOrderedAddCommGroup 𝕜
inst✝⁴ : TopologicalSpace 𝕜
inst✝³ : OrderTopology 𝕜
p : 𝕜
hp : Fact (0 < p)
a✝ : 𝕜
inst✝² : Archimedean 𝕜
x : AddCircle p
hx : x ≠ ↑a✝
inst✝¹ : DiscreteTopology ↥(zmultiples p)
inst✝ : DenselyOrdered 𝕜
a b : 𝕜
hb1 : a - p < b
hb2 : b < a
⊢ ∃ e, a ∈ e.source ∧ QuotientAddGroup.mk = ↑e
state_after: no goals
Theorem: SimpleGraph.incMatrix_mul_transpose_diag
File: Mathlib/Combinatorics/SimpleGraph/IncMatrix.lean

tactic: classical
rw [← sum_incMatrix_apply]
simp only [mul_apply, incMatrix_apply', transpose_apply, mul_ite, mul_one, mul_zero]
simp_all only [ite_true, sum_boole]
state_before: R : Type u_1
α : Type u_2
G : SimpleGraph α
inst✝² : Fintype (Sym2 α)
inst✝¹ : NonAssocSemiring R
a b : α
e : Sym2 α
inst✝ : Fintype ↑(G.neighborSet a)
⊢ (incMatrix R G * (incMatrix R G)ᵀ) a a = ↑(G.degree a)
state_after: no goals

tactic: rw [← sum_incMatrix_apply]
state_before: R : Type u_1
α : Type u_2
G : SimpleGraph α
inst✝² : Fintype (Sym2 α)
inst✝¹ : NonAssocSemiring R
a b : α
e : Sym2 α
inst✝ : Fintype ↑(G.neighborSet a)
⊢ (incMatrix R G * (incMatrix R G)ᵀ) a a = ↑(G.degree a)
state_after: R : Type u_1
α : Type u_2
G : SimpleGraph α
inst✝² : Fintype (Sym2 α)
inst✝¹ : NonAssocSemiring R
a b : α
e : Sym2 α
inst✝ : Fintype ↑(G.neighborSet a)
⊢ (incMatrix R G * (incMatrix R G)ᵀ) a a = ∑ e : Sym2 α, incMatrix R G a e

tactic: simp only [mul_apply, incMatrix_apply', transpose_apply, mul_ite, mul_one, mul_zero]
state_before: R : Type u_1
α : Type u_2
G : SimpleGraph α
inst✝² : Fintype (Sym2 α)
inst✝¹ : NonAssocSemiring R
a b : α
e : Sym2 α
inst✝ : Fintype ↑(G.neighborSet a)
⊢ (incMatrix R G * (incMatrix R G)ᵀ) a a = ∑ e : Sym2 α, incMatrix R G a e
state_after: R : Type u_1
α : Type u_2
G : SimpleGraph α
inst✝² : Fintype (Sym2 α)
inst✝¹ : NonAssocSemiring R
a b : α
e : Sym2 α
inst✝ : Fintype ↑(G.neighborSet a)
⊢ (∑ x : Sym2 α, if x ∈ G.incidenceSet a then if x ∈ G.incidenceSet a then 1 else 0 else 0) =
    ∑ x : Sym2 α, if x ∈ G.incidenceSet a then 1 else 0

tactic: simp_all only [ite_true, sum_boole]
state_before: R : Type u_1
α : Type u_2
G : SimpleGraph α
inst✝² : Fintype (Sym2 α)
inst✝¹ : NonAssocSemiring R
a b : α
e : Sym2 α
inst✝ : Fintype ↑(G.neighborSet a)
⊢ (∑ x : Sym2 α, if x ∈ G.incidenceSet a then if x ∈ G.incidenceSet a then 1 else 0 else 0) =
    ∑ x : Sym2 α, if x ∈ G.incidenceSet a then 1 else 0
state_after: no goals
Theorem: CategoryTheory.LocallyDiscrete.eqToHom_toLoc
File: Mathlib/CategoryTheory/Bicategory/LocallyDiscrete.lean

tactic: subst h
state_before: C : Type u
inst✝ : Category.{v, u} C
a b : C
h : a = b
⊢ (eqToHom h).toLoc = eqToHom ⋯
state_after: C : Type u
inst✝ : Category.{v, u} C
a : C
⊢ (eqToHom ⋯).toLoc = eqToHom ⋯

tactic: rfl
state_before: C : Type u
inst✝ : Category.{v, u} C
a : C
⊢ (eqToHom ⋯).toLoc = eqToHom ⋯
state_after: no goals
Theorem: orderOf_dvd_natCard
File: Mathlib/GroupTheory/OrderOfElement.lean

tactic: cases' fintypeOrInfinite G with h h
state_before: G✝ : Type u_1
H : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
inst✝² : Group G✝
inst✝¹ : Fintype G✝
x✝ : G✝
n : ℕ
G : Type u_6
inst✝ : Group G
x : G
⊢ orderOf x ∣ Nat.card G
state_after: case inl
G✝ : Type u_1
H : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
inst✝² : Group G✝
inst✝¹ : Fintype G✝
x✝ : G✝
n : ℕ
G : Type u_6
inst✝ : Group G
x : G
h : Fintype G
⊢ orderOf x ∣ Nat.card G

case inr
G✝ : Type u_1
H : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
inst✝² : Group G✝
inst✝¹ : Fintype G✝
x✝ : G✝
n : ℕ
G : Type u_6
inst✝ : Group G
x : G
h : Infinite G
⊢ orderOf x ∣ Nat.card G

tactic: simp only [Nat.card_eq_fintype_card, orderOf_dvd_card]
state_before: case inl
G✝ : Type u_1
H : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
inst✝² : Group G✝
inst✝¹ : Fintype G✝
x✝ : G✝
n : ℕ
G : Type u_6
inst✝ : Group G
x : G
h : Fintype G
⊢ orderOf x ∣ Nat.card G
state_after: no goals

tactic: simp only [card_eq_zero_of_infinite, dvd_zero]
state_before: case inr
G✝ : Type u_1
H : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
inst✝² : Group G✝
inst✝¹ : Fintype G✝
x✝ : G✝
n : ℕ
G : Type u_6
inst✝ : Group G
x : G
h : Infinite G
⊢ orderOf x ∣ Nat.card G
state_after: no goals
Theorem: padicNorm.values_discrete
File: Mathlib/NumberTheory/Padics/PadicNorm.lean

tactic: simp [padicNorm, hq]
state_before: p : ℕ
q : ℚ
hq : q ≠ 0
⊢ padicNorm p q = ↑p ^ (-padicValRat p q)
state_after: no goals
Theorem: Finset.Shatters.subset_iff
File: Mathlib/Combinatorics/SetFamily/Shatter.lean

tactic: rintro ⟨u, _, rfl⟩
state_before: α : Type u_1
inst✝ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s t : Finset α
a : α
n : ℕ
h : 𝒜.Shatters s
⊢ (∃ u ∈ 𝒜, s ∩ u = t) → t ⊆ s
state_after: case intro.intro
α : Type u_1
inst✝ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s : Finset α
a : α
n : ℕ
h : 𝒜.Shatters s
u : Finset α
left✝ : u ∈ 𝒜
⊢ s ∩ u ⊆ s

tactic: exact inter_subset_left
state_before: case intro.intro
α : Type u_1
inst✝ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s : Finset α
a : α
n : ℕ
h : 𝒜.Shatters s
u : Finset α
left✝ : u ∈ 𝒜
⊢ s ∩ u ⊆ s
state_after: no goals
Theorem: Complex.im_ofReal_mul
File: Mathlib/Data/Complex/Basic.lean

tactic: simp [ofReal']
state_before: r : ℝ
z : ℂ
⊢ (↑r * z).im = r * z.im
state_after: no goals
Theorem: QuaternionAlgebra.Basis.j_mul_k
File: Mathlib/Algebra/QuaternionBasis.lean

tactic: rw [← i_mul_j, ← mul_assoc, j_mul_i, neg_mul, k_mul_j, neg_smul]
state_before: R : Type u_1
A : Type u_2
B : Type u_3
inst✝⁴ : CommRing R
inst✝³ : Ring A
inst✝² : Ring B
inst✝¹ : Algebra R A
inst✝ : Algebra R B
c₁ c₂ : R
q : Basis A c₁ c₂
⊢ q.j * q.k = -c₂ • q.i
state_after: no goals
Theorem: Set.Finite.toFinset_prod
File: Mathlib/Data/Set/Finite.lean

tactic: simp
state_before: α : Type u
β : Type v
ι : Sort w
γ : Type x
s : Set α
t : Set β
hs : s.Finite
ht : t.Finite
⊢ ∀ (a : α × β), a ∈ hs.toFinset ×ˢ ht.toFinset ↔ a ∈ ⋯.toFinset
state_after: no goals
Theorem: le_or_lt_of_mul_le_mul
File: Mathlib/Algebra/Order/Monoid/Unbundled/MinMax.lean

tactic: contrapose!
state_before: α : Type u_1
β : Type u_2
inst✝³ : LinearOrder α
inst✝² : Mul α
inst✝¹ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
inst✝ : CovariantClass α α (swap fun x x_1 => x * x_1) fun x x_1 => x < x_1
a₁ a₂ b₁ b₂ : α
⊢ a₁ * b₁ ≤ a₂ * b₂ → a₁ ≤ a₂ ∨ b₁ < b₂
state_after: α : Type u_1
β : Type u_2
inst✝³ : LinearOrder α
inst✝² : Mul α
inst✝¹ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
inst✝ : CovariantClass α α (swap fun x x_1 => x * x_1) fun x x_1 => x < x_1
a₁ a₂ b₁ b₂ : α
⊢ a₂ < a₁ ∧ b₂ ≤ b₁ → a₂ * b₂ < a₁ * b₁

tactic: exact fun h => mul_lt_mul_of_lt_of_le h.1 h.2
state_before: α : Type u_1
β : Type u_2
inst✝³ : LinearOrder α
inst✝² : Mul α
inst✝¹ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
inst✝ : CovariantClass α α (swap fun x x_1 => x * x_1) fun x x_1 => x < x_1
a₁ a₂ b₁ b₂ : α
⊢ a₂ < a₁ ∧ b₂ ≤ b₁ → a₂ * b₂ < a₁ * b₁
state_after: no goals
Theorem: Matroid.comap_map
File: Mathlib/Data/Matroid/Map.lean

tactic: simp [eq_iff_indep_iff_indep_forall, preimage_image_eq _ hf, and_iff_left hf.injOn,
  image_eq_image hf]
state_before: α : Type u_1
β : Type u_2
f✝ : α → β
E I s : Set α
M : Matroid α
N : Matroid β
f : α → β
hf : Injective f
⊢ (M.map f ⋯).comap f = M
state_after: no goals
Theorem: LinearMap.dualMap_bijective_iff
File: Mathlib/LinearAlgebra/Dual.lean

tactic: simp_rw [Function.Bijective, dualMap_surjective_iff, dualMap_injective_iff, and_comm]
state_before: K : Type uK
inst✝⁴ : Field K
V₁ : Type uV₁
V₂ : Type uV₂
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V₂
inst✝ : Module K V₂
f : V₁ →ₗ[K] V₂
⊢ Function.Bijective ⇑f.dualMap ↔ Function.Bijective ⇑f
state_after: no goals
Theorem: Equiv.Perm.Disjoint.inv_left
File: Mathlib/GroupTheory/Perm/Support.lean

tactic: intro x
state_before: α : Type u_1
f g h✝ : Perm α
h : f.Disjoint g
⊢ f⁻¹.Disjoint g
state_after: α : Type u_1
f g h✝ : Perm α
h : f.Disjoint g
x : α
⊢ f⁻¹ x = x ∨ g x = x

tactic: rw [inv_eq_iff_eq, eq_comm]
state_before: α : Type u_1
f g h✝ : Perm α
h : f.Disjoint g
x : α
⊢ f⁻¹ x = x ∨ g x = x
state_after: α : Type u_1
f g h✝ : Perm α
h : f.Disjoint g
x : α
⊢ f x = x ∨ g x = x

tactic: exact h x
state_before: α : Type u_1
f g h✝ : Perm α
h : f.Disjoint g
x : α
⊢ f x = x ∨ g x = x
state_after: no goals
Theorem: Nat.odd_sub
File: Mathlib/Algebra/Ring/Parity.lean

tactic: rw [odd_iff_not_even, even_sub h, not_iff, odd_iff_not_even]
state_before: F : Type u_1
α : Type u_2
β : Type u_3
R : Type u_4
m n : ℕ
h : n ≤ m
⊢ Odd (m - n) ↔ (Odd m ↔ Even n)
state_after: no goals
Theorem: SemiconjBy.inv_inv_symm_iff
File: Mathlib/Algebra/Group/Semiconj/Basic.lean

tactic: simp_rw [SemiconjBy, ← mul_inv_rev, inv_inj, eq_comm]
state_before: G : Type u_1
inst✝ : DivisionMonoid G
a x y : G
⊢ SemiconjBy a⁻¹ x⁻¹ y⁻¹ ↔ SemiconjBy a y x
state_after: no goals
Theorem: StrictConvexOn.strictMonoOn_deriv
File: Mathlib/Analysis/Convex/Deriv.lean

tactic: intro x hx y hy hxy
state_before: S : Set ℝ
f : ℝ → ℝ
x y f' : ℝ
hfc : StrictConvexOn ℝ S f
hfd : ∀ x ∈ S, DifferentiableAt ℝ f x
⊢ StrictMonoOn (deriv f) S
state_after: S : Set ℝ
f : ℝ → ℝ
x✝ y✝ f' : ℝ
hfc : StrictConvexOn ℝ S f
hfd : ∀ x ∈ S, DifferentiableAt ℝ f x
x : ℝ
hx : x ∈ S
y : ℝ
hy : y ∈ S
hxy : x < y
⊢ deriv f x < deriv f y

tactic: exact (hfc.deriv_lt_slope hx hy hxy (hfd x hx)).trans (hfc.slope_lt_deriv hx hy hxy (hfd y hy))
state_before: S : Set ℝ
f : ℝ → ℝ
x✝ y✝ f' : ℝ
hfc : StrictConvexOn ℝ S f
hfd : ∀ x ∈ S, DifferentiableAt ℝ f x
x : ℝ
hx : x ∈ S
y : ℝ
hy : y ∈ S
hxy : x < y
⊢ deriv f x < deriv f y
state_after: no goals