1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: Matrix.rank_diagonal
File: Mathlib/Data/Matrix/Rank.lean

tactic: rw [Matrix.rank, ← Matrix.toLin'_apply', FiniteDimensional.finrank, ← LinearMap.rank,
  LinearMap.rank_diagonal, Cardinal.toNat_natCast]
state_before: l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
R : Type u_5
inst✝⁵ : Fintype n
inst✝⁴ : Fintype o
inst✝³ : Field R
inst✝² : Fintype m
inst✝¹ : DecidableEq m
inst✝ : DecidableEq R
w : m → R
⊢ (diagonal w).rank = Fintype.card { i // w i ≠ 0 }
state_after: no goals
Theorem: Nat.leRecOn_trans
File: Mathlib/Data/Nat/Defs.lean

tactic: induction hmk with
| refl => rw [leRecOn_self]
| step hmk ih => rw [leRecOn_succ (Nat.le_trans hnm hmk), ih, leRecOn_succ]
state_before: a b c d m✝ n✝ k✝ : ℕ
p q : ℕ → Prop
C : ℕ → Sort u_1
n m k : ℕ
hnm : n ≤ m
hmk : m ≤ k
next : {k : ℕ} → C k → C (k + 1)
x : C n
⊢ leRecOn ⋯ next x = leRecOn hmk next (leRecOn hnm next x)
state_after: no goals

tactic: rw [leRecOn_self]
state_before: case refl
a b c d m✝ n✝ k✝ : ℕ
p q : ℕ → Prop
C : ℕ → Sort u_1
n m k : ℕ
hnm : n ≤ m
next : {k : ℕ} → C k → C (k + 1)
x : C n
⊢ leRecOn ⋯ next x = leRecOn ⋯ next (leRecOn hnm next x)
state_after: no goals

tactic: rw [leRecOn_succ (Nat.le_trans hnm hmk), ih, leRecOn_succ]
state_before: case step
a b c d m✝¹ n✝ k✝ : ℕ
p q : ℕ → Prop
C : ℕ → Sort u_1
n m k : ℕ
hnm : n ≤ m
next : {k : ℕ} → C k → C (k + 1)
x : C n
m✝ : ℕ
hmk : m.le m✝
ih : leRecOn ⋯ next x = leRecOn hmk next (leRecOn hnm next x)
⊢ leRecOn ⋯ next x = leRecOn ⋯ next (leRecOn hnm next x)
state_after: no goals
Theorem: eqRec_heq_self
File: .lake/packages/batteries/Batteries/Logic.lean

tactic: subst e
state_before: α : Sort u_1
a : α
motive : (a' : α) → a = a' → Sort u_2
x : motive a ⋯
a' : α
e : a = a'
⊢ HEq (e ▸ x) x
state_after: α : Sort u_1
a : α
motive : (a' : α) → a = a' → Sort u_2
x : motive a ⋯
⊢ HEq (⋯ ▸ x) x

tactic: rfl
state_before: α : Sort u_1
a : α
motive : (a' : α) → a = a' → Sort u_2
x : motive a ⋯
⊢ HEq (⋯ ▸ x) x
state_after: no goals
Theorem: Function.mulSupport_iSup
File: Mathlib/Algebra/Order/Group/Indicator.lean

tactic: simp only [mulSupport_subset_iff', mem_iUnion, not_exists, nmem_mulSupport]
state_before: ι : Sort u_1
α : Type u_2
β : Type u_3
M : Type u_4
inst✝² : One M
inst✝¹ : ConditionallyCompleteLattice M
inst✝ : Nonempty ι
f : ι → α → M
⊢ (mulSupport fun x => ⨆ i, f i x) ⊆ ⋃ i, mulSupport (f i)
state_after: ι : Sort u_1
α : Type u_2
β : Type u_3
M : Type u_4
inst✝² : One M
inst✝¹ : ConditionallyCompleteLattice M
inst✝ : Nonempty ι
f : ι → α → M
⊢ ∀ (x : α), (∀ (x_1 : ι), f x_1 x = 1) → ⨆ i, f i x = 1

tactic: intro x hx
state_before: ι : Sort u_1
α : Type u_2
β : Type u_3
M : Type u_4
inst✝² : One M
inst✝¹ : ConditionallyCompleteLattice M
inst✝ : Nonempty ι
f : ι → α → M
⊢ ∀ (x : α), (∀ (x_1 : ι), f x_1 x = 1) → ⨆ i, f i x = 1
state_after: ι : Sort u_1
α : Type u_2
β : Type u_3
M : Type u_4
inst✝² : One M
inst✝¹ : ConditionallyCompleteLattice M
inst✝ : Nonempty ι
f : ι → α → M
x : α
hx : ∀ (x_1 : ι), f x_1 x = 1
⊢ ⨆ i, f i x = 1

tactic: simp only [hx, ciSup_const]
state_before: ι : Sort u_1
α : Type u_2
β : Type u_3
M : Type u_4
inst✝² : One M
inst✝¹ : ConditionallyCompleteLattice M
inst✝ : Nonempty ι
f : ι → α → M
x : α
hx : ∀ (x_1 : ι), f x_1 x = 1
⊢ ⨆ i, f i x = 1
state_after: no goals
Theorem: CategoryTheory.Sieve.functorPullback_id
File: Mathlib/CategoryTheory/Sites/Sieves.lean

tactic: ext
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
F : C ⥤ D
X Y Z : C
f : Y ⟶ X
S R✝ : Sieve X
E : Type u₃
inst✝ : Category.{v₃, u₃} E
G : D ⥤ E
R : Sieve X
⊢ functorPullback (𝟭 C) R = R
state_after: case h
C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
F : C ⥤ D
X Y Z : C
f : Y ⟶ X
S R✝ : Sieve X
E : Type u₃
inst✝ : Category.{v₃, u₃} E
G : D ⥤ E
R : Sieve X
Y✝ : C
f✝ : Y✝ ⟶ X
⊢ (functorPullback (𝟭 C) R).arrows f✝ ↔ R.arrows f✝

tactic: rfl
state_before: case h
C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
F : C ⥤ D
X Y Z : C
f : Y ⟶ X
S R✝ : Sieve X
E : Type u₃
inst✝ : Category.{v₃, u₃} E
G : D ⥤ E
R : Sieve X
Y✝ : C
f✝ : Y✝ ⟶ X
⊢ (functorPullback (𝟭 C) R).arrows f✝ ↔ R.arrows f✝
state_after: no goals
Theorem: CategoryTheory.Discrete.mk_as
File: Mathlib/CategoryTheory/DiscreteCategory.lean

tactic: rfl
state_before: α : Type u₁
X : Discrete α
⊢ { as := X.as } = X
state_after: no goals
Theorem: Bool.true_eq_false_eq_False
File: Mathlib/Init/Data/Bool/Lemmas.lean

tactic: decide
state_before: ⊢ ¬true = false
state_after: no goals
Theorem: Metric.hausdorffDist_nonneg
File: Mathlib/Topology/MetricSpace/HausdorffDistance.lean

tactic: simp [hausdorffDist]
state_before: ι : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
s t u : Set α
x y : α
Φ : α → β
⊢ 0 ≤ hausdorffDist s t
state_after: no goals
Theorem: circleIntegral.integral_radius_zero
File: Mathlib/MeasureTheory/Integral/CircleIntegral.lean

tactic: simp (config := { unfoldPartialApp := true }) [circleIntegral, const]
state_before: E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℂ E
inst✝ : CompleteSpace E
f : ℂ → E
c : ℂ
⊢ (∮ (z : ℂ) in C(c, 0), f z) = 0
state_after: no goals
Theorem: PadicInt.zmod_congr_of_sub_mem_span_aux
File: Mathlib/NumberTheory/Padics/RingHoms.lean

tactic: rw [Ideal.mem_span_singleton] at ha hb
state_before: p : ℕ
hp_prime : Fact (Nat.Prime p)
r : ℚ
n : ℕ
x : ℤ_[p]
a b : ℤ
ha : x - ↑a ∈ Ideal.span {↑p ^ n}
hb : x - ↑b ∈ Ideal.span {↑p ^ n}
⊢ ↑a = ↑b
state_after: p : ℕ
hp_prime : Fact (Nat.Prime p)
r : ℚ
n : ℕ
x : ℤ_[p]
a b : ℤ
ha : ↑p ^ n ∣ x - ↑a
hb : ↑p ^ n ∣ x - ↑b
⊢ ↑a = ↑b

tactic: rw [← sub_eq_zero, ← Int.cast_sub, ZMod.intCast_zmod_eq_zero_iff_dvd, Int.natCast_pow]
state_before: p : ℕ
hp_prime : Fact (Nat.Prime p)
r : ℚ
n : ℕ
x : ℤ_[p]
a b : ℤ
ha : ↑p ^ n ∣ x - ↑a
hb : ↑p ^ n ∣ x - ↑b
⊢ ↑a = ↑b
state_after: p : ℕ
hp_prime : Fact (Nat.Prime p)
r : ℚ
n : ℕ
x : ℤ_[p]
a b : ℤ
ha : ↑p ^ n ∣ x - ↑a
hb : ↑p ^ n ∣ x - ↑b
⊢ ↑p ^ n ∣ a - b

tactic: rw [← dvd_neg, neg_sub] at ha
state_before: p : ℕ
hp_prime : Fact (Nat.Prime p)
r : ℚ
n : ℕ
x : ℤ_[p]
a b : ℤ
ha : ↑p ^ n ∣ x - ↑a
hb : ↑p ^ n ∣ x - ↑b
⊢ ↑p ^ n ∣ a - b
state_after: p : ℕ
hp_prime : Fact (Nat.Prime p)
r : ℚ
n : ℕ
x : ℤ_[p]
a b : ℤ
ha : ↑p ^ n ∣ ↑a - x
hb : ↑p ^ n ∣ x - ↑b
⊢ ↑p ^ n ∣ a - b

tactic: have := dvd_add ha hb
state_before: p : ℕ
hp_prime : Fact (Nat.Prime p)
r : ℚ
n : ℕ
x : ℤ_[p]
a b : ℤ
ha : ↑p ^ n ∣ ↑a - x
hb : ↑p ^ n ∣ x - ↑b
⊢ ↑p ^ n ∣ a - b
state_after: p : ℕ
hp_prime : Fact (Nat.Prime p)
r : ℚ
n : ℕ
x : ℤ_[p]
a b : ℤ
ha : ↑p ^ n ∣ ↑a - x
hb : ↑p ^ n ∣ x - ↑b
this : ↑p ^ n ∣ ↑a - x + (x - ↑b)
⊢ ↑p ^ n ∣ a - b

tactic: rwa [sub_eq_add_neg, sub_eq_add_neg, add_assoc, neg_add_cancel_left, ← sub_eq_add_neg, ←
  Int.cast_sub, pow_p_dvd_int_iff] at this
state_before: p : ℕ
hp_prime : Fact (Nat.Prime p)
r : ℚ
n : ℕ
x : ℤ_[p]
a b : ℤ
ha : ↑p ^ n ∣ ↑a - x
hb : ↑p ^ n ∣ x - ↑b
this : ↑p ^ n ∣ ↑a - x + (x - ↑b)
⊢ ↑p ^ n ∣ a - b
state_after: no goals
Theorem: MeasureTheory.measureUnivNNReal_eq_zero
File: Mathlib/MeasureTheory/Measure/Typeclasses.lean

tactic: rw [← MeasureTheory.Measure.measure_univ_eq_zero, ← coe_measureUnivNNReal]
state_before: α : Type u_1
β : Type u_2
δ : Type u_3
ι : Type u_4
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
μ ν ν₁ ν₂ : Measure α
s t : Set α
inst✝ : IsFiniteMeasure μ
⊢ measureUnivNNReal μ = 0 ↔ μ = 0
state_after: α : Type u_1
β : Type u_2
δ : Type u_3
ι : Type u_4
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
μ ν ν₁ ν₂ : Measure α
s t : Set α
inst✝ : IsFiniteMeasure μ
⊢ measureUnivNNReal μ = 0 ↔ ↑(measureUnivNNReal μ) = 0

tactic: norm_cast
state_before: α : Type u_1
β : Type u_2
δ : Type u_3
ι : Type u_4
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
μ ν ν₁ ν₂ : Measure α
s t : Set α
inst✝ : IsFiniteMeasure μ
⊢ measureUnivNNReal μ = 0 ↔ ↑(measureUnivNNReal μ) = 0
state_after: no goals
Theorem: CategoryTheory.transferNatTransSelf_of_iso
File: Mathlib/CategoryTheory/Adjunction/Mates.lean

tactic: suffices IsIso ((transferNatTransSelf adj₁ adj₂).symm (transferNatTransSelf adj₁ adj₂ f))
  by simpa using this
state_before: C : Type u₁
D : Type u₂
inst✝² : Category.{v₁, u₁} C
inst✝¹ : Category.{v₂, u₂} D
L₁ L₂ L₃ : C ⥤ D
R₁ R₂ R₃ : D ⥤ C
adj₁ : L₁ ⊣ R₁
adj₂ : L₂ ⊣ R₂
adj₃ : L₃ ⊣ R₃
f : L₂ ⟶ L₁
inst✝ : IsIso ((transferNatTransSelf adj₁ adj₂) f)
⊢ IsIso f
state_after: C : Type u₁
D : Type u₂
inst✝² : Category.{v₁, u₁} C
inst✝¹ : Category.{v₂, u₂} D
L₁ L₂ L₃ : C ⥤ D
R₁ R₂ R₃ : D ⥤ C
adj₁ : L₁ ⊣ R₁
adj₂ : L₂ ⊣ R₂
adj₃ : L₃ ⊣ R₃
f : L₂ ⟶ L₁
inst✝ : IsIso ((transferNatTransSelf adj₁ adj₂) f)
⊢ IsIso ((transferNatTransSelf adj₁ adj₂).symm ((transferNatTransSelf adj₁ adj₂) f))

tactic: infer_instance
state_before: C : Type u₁
D : Type u₂
inst✝² : Category.{v₁, u₁} C
inst✝¹ : Category.{v₂, u₂} D
L₁ L₂ L₃ : C ⥤ D
R₁ R₂ R₃ : D ⥤ C
adj₁ : L₁ ⊣ R₁
adj₂ : L₂ ⊣ R₂
adj₃ : L₃ ⊣ R₃
f : L₂ ⟶ L₁
inst✝ : IsIso ((transferNatTransSelf adj₁ adj₂) f)
⊢ IsIso ((transferNatTransSelf adj₁ adj₂).symm ((transferNatTransSelf adj₁ adj₂) f))
state_after: no goals

tactic: simpa using this
state_before: C : Type u₁
D : Type u₂
inst✝² : Category.{v₁, u₁} C
inst✝¹ : Category.{v₂, u₂} D
L₁ L₂ L₃ : C ⥤ D
R₁ R₂ R₃ : D ⥤ C
adj₁ : L₁ ⊣ R₁
adj₂ : L₂ ⊣ R₂
adj₃ : L₃ ⊣ R₃
f : L₂ ⟶ L₁
inst✝ : IsIso ((transferNatTransSelf adj₁ adj₂) f)
this : IsIso ((transferNatTransSelf adj₁ adj₂).symm ((transferNatTransSelf adj₁ adj₂) f))
⊢ IsIso f
state_after: no goals
Theorem: CategoryTheory.IsPushout.of_hasBinaryCoproduct
File: Mathlib/CategoryTheory/Limits/Shapes/CommSq.lean

tactic: convert @of_is_coproduct _ _ 0 X Y _ (colimit.isColimit _) HasZeroObject.zeroIsInitial
  <;> apply Subsingleton.elim
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
Z X Y P : C
f : Z ⟶ X
g : Z ⟶ Y
inl : X ⟶ P
inr : Y ⟶ P
inst✝² : HasBinaryCoproduct X Y
inst✝¹ : HasZeroObject C
inst✝ : HasZeroMorphisms C
⊢ IsPushout 0 0 coprod.inl coprod.inr
state_after: no goals
Theorem: Function.Periodic.neg
File: Mathlib/Algebra/Periodic.lean

tactic: simpa only [sub_eq_add_neg, Periodic] using h.sub_eq
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
f g : α → β
c c₁ c₂ x : α
inst✝ : AddGroup α
h : Periodic f c
⊢ Periodic f (-c)
state_after: no goals
Theorem: Nat.digit_sum_le
File: Mathlib/Data/Nat/Digits.lean

tactic: induction' n with n
state_before: n✝ p n : ℕ
⊢ (p.digits n).sum ≤ n
state_after: case zero
n p : ℕ
⊢ (p.digits 0).sum ≤ 0

case succ
n✝ p n : ℕ
a✝ : (p.digits n).sum ≤ n
⊢ (p.digits (n + 1)).sum ≤ n + 1

tactic: exact digits_zero _ ▸ Nat.le_refl (List.sum [])
state_before: case zero
n p : ℕ
⊢ (p.digits 0).sum ≤ 0
state_after: no goals

tactic: induction' p with p
state_before: case succ
n✝ p n : ℕ
a✝ : (p.digits n).sum ≤ n
⊢ (p.digits (n + 1)).sum ≤ n + 1
state_after: case succ.zero
n✝ n : ℕ
a✝ : (digits 0 n).sum ≤ n
⊢ (digits 0 (n + 1)).sum ≤ n + 1

case succ.succ
n✝ n p : ℕ
a✝¹ : (p.digits n).sum ≤ n → (p.digits (n + 1)).sum ≤ n + 1
a✝ : ((p + 1).digits n).sum ≤ n
⊢ ((p + 1).digits (n + 1)).sum ≤ n + 1

tactic: rw [digits_zero_succ, List.sum_cons, List.sum_nil, add_zero]
state_before: case succ.zero
n✝ n : ℕ
a✝ : (digits 0 n).sum ≤ n
⊢ (digits 0 (n + 1)).sum ≤ n + 1
state_after: no goals

tactic: nth_rw 2 [← ofDigits_digits p.succ (n + 1)]
state_before: case succ.succ
n✝ n p : ℕ
a✝¹ : (p.digits n).sum ≤ n → (p.digits (n + 1)).sum ≤ n + 1
a✝ : ((p + 1).digits n).sum ≤ n
⊢ ((p + 1).digits (n + 1)).sum ≤ n + 1
state_after: case succ.succ
n✝ n p : ℕ
a✝¹ : (p.digits n).sum ≤ n → (p.digits (n + 1)).sum ≤ n + 1
a✝ : ((p + 1).digits n).sum ≤ n
⊢ ((p + 1).digits (n + 1)).sum ≤ ofDigits p.succ (p.succ.digits (n + 1))

tactic: rw [← ofDigits_one <| digits p.succ n.succ]
state_before: case succ.succ
n✝ n p : ℕ
a✝¹ : (p.digits n).sum ≤ n → (p.digits (n + 1)).sum ≤ n + 1
a✝ : ((p + 1).digits n).sum ≤ n
⊢ ((p + 1).digits (n + 1)).sum ≤ ofDigits p.succ (p.succ.digits (n + 1))
state_after: case succ.succ
n✝ n p : ℕ
a✝¹ : (p.digits n).sum ≤ n → (p.digits (n + 1)).sum ≤ n + 1
a✝ : ((p + 1).digits n).sum ≤ n
⊢ ofDigits 1 (p.succ.digits n.succ) ≤ ofDigits p.succ (p.succ.digits (n + 1))

tactic: exact ofDigits_monotone (digits p.succ n.succ) <| Nat.succ_pos p
state_before: case succ.succ
n✝ n p : ℕ
a✝¹ : (p.digits n).sum ≤ n → (p.digits (n + 1)).sum ≤ n + 1
a✝ : ((p + 1).digits n).sum ≤ n
⊢ ofDigits 1 (p.succ.digits n.succ) ≤ ofDigits p.succ (p.succ.digits (n + 1))
state_after: no goals
Theorem: SetTheory.Game.add_lf_add_right
File: Mathlib/SetTheory/Game/Basic.lean

tactic: rintro ⟨b⟩ ⟨c⟩ h ⟨a⟩
state_before: ⊢ ∀ {b c : Game}, b ⧏ c → ∀ (a : Game), b + a ⧏ c + a
state_after: case mk.mk.mk
b✝ : Game
b : PGame
c✝ : Game
c : PGame
h : Quot.mk Setoid.r b ⧏ Quot.mk Setoid.r c
a✝ : Game
a : PGame
⊢ Quot.mk Setoid.r b + Quot.mk Setoid.r a ⧏ Quot.mk Setoid.r c + Quot.mk Setoid.r a

tactic: apply PGame.add_lf_add_right h
state_before: case mk.mk.mk
b✝ : Game
b : PGame
c✝ : Game
c : PGame
h : Quot.mk Setoid.r b ⧏ Quot.mk Setoid.r c
a✝ : Game
a : PGame
⊢ Quot.mk Setoid.r b + Quot.mk Setoid.r a ⧏ Quot.mk Setoid.r c + Quot.mk Setoid.r a
state_after: no goals
Theorem: Polynomial.of_mem_support_derivative
File: Mathlib/Algebra/Polynomial/Derivative.lean

tactic: rw [coeff_derivative, h1, zero_mul]
state_before: R : Type u
S : Type v
T : Type w
ι : Type y
A : Type z
a b : R
n✝ : ℕ
inst✝ : Semiring R
p : R[X]
n : ℕ
h : n ∈ (derivative p).support
h1 : p.coeff (n + 1) = 0
⊢ (derivative p).coeff n = 0
state_after: no goals
Theorem: Cubic.splits_iff_roots_eq_three
File: Mathlib/Algebra/CubicDiscriminant.lean

tactic: rw [splits_iff_card_roots ha, card_eq_three]
state_before: R : Type u_1
S : Type u_2
F : Type u_3
K : Type u_4
P : Cubic F
inst✝¹ : Field F
inst✝ : Field K
φ : F →+* K
x y z : K
ha : P.a ≠ 0
⊢ Splits φ P.toPoly ↔ ∃ x y z, (map φ P).roots = {x, y, z}
state_after: no goals
Theorem: CategoryTheory.Localization.homEquiv_comp
File: Mathlib/CategoryTheory/Localization/HomEquiv.lean

tactic: apply LocalizerMorphism.homMap_comp
state_before: C : Type u_1
C₁ : Type u_2
C₂ : Type u_3
C₃ : Type u_4
D₁ : Type u_5
D₂ : Type u_6
D₃ : Type u_7
inst✝⁹ : Category.{u_9, u_1} C
inst✝⁸ : Category.{?u.45338, u_2} C₁
inst✝⁷ : Category.{?u.45342, u_3} C₂
inst✝⁶ : Category.{?u.45346, u_4} C₃
inst✝⁵ : Category.{u_8, u_5} D₁
inst✝⁴ : Category.{u_10, u_6} D₂
inst✝³ : Category.{?u.45358, u_7} D₃
W : MorphismProperty C
L₁ : C ⥤ D₁
inst✝² : L₁.IsLocalization W
L₂ : C ⥤ D₂
inst✝¹ : L₂.IsLocalization W
L₃ : C ⥤ D₃
inst✝ : L₃.IsLocalization W
X Y Z : C
f : L₁.obj X ⟶ L₁.obj Y
g : L₁.obj Y ⟶ L₁.obj Z
⊢ (homEquiv W L₁ L₂) (f ≫ g) = (homEquiv W L₁ L₂) f ≫ (homEquiv W L₁ L₂) g
state_after: no goals
Theorem: Equiv.Perm.card_support_extend_domain
File: Mathlib/GroupTheory/Perm/Support.lean

tactic: simp
state_before: α : Type u_1
inst✝⁴ : DecidableEq α
inst✝³ : Fintype α
f✝ g✝ : Perm α
β : Type u_2
inst✝² : DecidableEq β
inst✝¹ : Fintype β
p : β → Prop
inst✝ : DecidablePred p
f : α ≃ Subtype p
g : Perm α
⊢ (g.extendDomain f).support.card = g.support.card
state_after: no goals
Theorem: Finset.prod_piecewise
File: Mathlib/Algebra/BigOperators/Group/Finset.lean

tactic: erw [prod_ite, filter_mem_eq_inter, ← sdiff_eq_filter]
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 β
inst✝ : DecidableEq α
s t : Finset α
f g : α → β
⊢ ∏ x ∈ s, t.piecewise f g x = (∏ x ∈ s ∩ t, f x) * ∏ x ∈ s \ t, g x
state_after: no goals
Theorem: AlgebraicTopology.DoldKan.HigherFacesVanish.of_comp
File: Mathlib/AlgebraicTopology/DoldKan/Faces.lean

tactic: rw [assoc, v j hj, comp_zero]
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
Y Z : C
q n : ℕ
φ : Y ⟶ X _[n + 1]
v : HigherFacesVanish q φ
f : Z ⟶ Y
j : Fin (n + 1)
hj : n + 1 ≤ ↑j + q
⊢ (f ≫ φ) ≫ X.δ j.succ = 0
state_after: no goals
Theorem: MvPolynomial.rename_injective
File: Mathlib/Algebra/MvPolynomial/Rename.lean

tactic: have :
  (rename f : MvPolynomial σ R → MvPolynomial τ R) = Finsupp.mapDomain (Finsupp.mapDomain f) :=
  funext (rename_eq f)
state_before: σ : Type u_1
τ : Type u_2
α : Type u_3
R : Type u_4
S : Type u_5
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
f : σ → τ
hf : Injective f
⊢ Injective ⇑(rename f)
state_after: σ : Type u_1
τ : Type u_2
α : Type u_3
R : Type u_4
S : Type u_5
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
f : σ → τ
hf : Injective f
this : ⇑(rename f) = Finsupp.mapDomain (Finsupp.mapDomain f)
⊢ Injective ⇑(rename f)

tactic: rw [this]
state_before: σ : Type u_1
τ : Type u_2
α : Type u_3
R : Type u_4
S : Type u_5
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
f : σ → τ
hf : Injective f
this : ⇑(rename f) = Finsupp.mapDomain (Finsupp.mapDomain f)
⊢ Injective ⇑(rename f)
state_after: σ : Type u_1
τ : Type u_2
α : Type u_3
R : Type u_4
S : Type u_5
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
f : σ → τ
hf : Injective f
this : ⇑(rename f) = Finsupp.mapDomain (Finsupp.mapDomain f)
⊢ Injective (Finsupp.mapDomain (Finsupp.mapDomain f))

tactic: exact Finsupp.mapDomain_injective (Finsupp.mapDomain_injective hf)
state_before: σ : Type u_1
τ : Type u_2
α : Type u_3
R : Type u_4
S : Type u_5
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
f : σ → τ
hf : Injective f
this : ⇑(rename f) = Finsupp.mapDomain (Finsupp.mapDomain f)
⊢ Injective (Finsupp.mapDomain (Finsupp.mapDomain f))
state_after: no goals
Theorem: HomologicalComplex.homologyπ_singleObjHomologySelfIso_hom
File: Mathlib/Algebra/Homology/SingleHomology.lean

tactic: simp [singleObjCyclesSelfIso, singleObjHomologySelfIso]
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : HasZeroMorphisms C
inst✝¹ : HasZeroObject C
ι : Type u_1
inst✝ : DecidableEq ι
c : ComplexShape ι
j : ι
A : C
⊢ ((single C c j).obj A).homologyπ j ≫ (singleObjHomologySelfIso c j A).hom = (singleObjCyclesSelfIso c j A).hom
state_after: no goals
Theorem: Path.Homotopy.eval_one
File: Mathlib/Topology/Homotopy/Path.lean

tactic: ext t
state_before: X : Type u
Y : Type v
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x₀ x₁ x₂ x₃ : X
p₀ p₁ : Path x₀ x₁
F : p₀.Homotopy p₁
⊢ F.eval 1 = p₁
state_after: case a.h
X : Type u
Y : Type v
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x₀ x₁ x₂ x₃ : X
p₀ p₁ : Path x₀ x₁
F : p₀.Homotopy p₁
t : ↑I
⊢ (F.eval 1) t = p₁ t

tactic: simp [eval]
state_before: case a.h
X : Type u
Y : Type v
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x₀ x₁ x₂ x₃ : X
p₀ p₁ : Path x₀ x₁
F : p₀.Homotopy p₁
t : ↑I
⊢ (F.eval 1) t = p₁ t
state_after: no goals
Theorem: Real.neg_pi_div_two_lt_arcsin
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Inverse.lean

tactic: rw [sin_neg, sin_pi_div_two]
state_before: x✝ y x : ℝ
⊢ sin (-(π / 2)) < x ↔ -1 < x
state_after: no goals
Theorem: CategoryTheory.Adjunction.homEquiv_naturality_right_symm
File: Mathlib/CategoryTheory/Adjunction/Basic.lean

tactic: rw [Equiv.symm_apply_eq]
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
F : C ⥤ D
G : D ⥤ C
adj : F ⊣ G
X' X : C
Y Y' : D
f : X ⟶ G.obj Y
g : Y ⟶ Y'
⊢ (adj.homEquiv X Y').symm (f ≫ G.map g) = (adj.homEquiv X Y).symm f ≫ g
state_after: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
F : C ⥤ D
G : D ⥤ C
adj : F ⊣ G
X' X : C
Y Y' : D
f : X ⟶ G.obj Y
g : Y ⟶ Y'
⊢ f ≫ G.map g = (adj.homEquiv X Y') ((adj.homEquiv X Y).symm f ≫ g)

tactic: simp only [homEquiv_naturality_right,eq_self_iff_true,Equiv.apply_symm_apply]
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
F : C ⥤ D
G : D ⥤ C
adj : F ⊣ G
X' X : C
Y Y' : D
f : X ⟶ G.obj Y
g : Y ⟶ Y'
⊢ f ≫ G.map g = (adj.homEquiv X Y') ((adj.homEquiv X Y).symm f ≫ g)
state_after: no goals
Theorem: multiplicity.unique
File: Mathlib/RingTheory/Multiplicity.lean

tactic: have : Finite a b := ⟨k, hsucc⟩
state_before: α : Type u_1
β : Type u_2
inst✝³ : Monoid α
inst✝² : Monoid β
inst✝¹ : DecidableRel fun x x_1 => x ∣ x_1
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
a b : α
k : ℕ
hk : a ^ k ∣ b
hsucc : ¬a ^ (k + 1) ∣ b
⊢ multiplicity a b ≤ ↑k
state_after: α : Type u_1
β : Type u_2
inst✝³ : Monoid α
inst✝² : Monoid β
inst✝¹ : DecidableRel fun x x_1 => x ∣ x_1
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
a b : α
k : ℕ
hk : a ^ k ∣ b
hsucc : ¬a ^ (k + 1) ∣ b
this : Finite a b
⊢ multiplicity a b ≤ ↑k

tactic: rw [PartENat.le_coe_iff]
state_before: α : Type u_1
β : Type u_2
inst✝³ : Monoid α
inst✝² : Monoid β
inst✝¹ : DecidableRel fun x x_1 => x ∣ x_1
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
a b : α
k : ℕ
hk : a ^ k ∣ b
hsucc : ¬a ^ (k + 1) ∣ b
this : Finite a b
⊢ multiplicity a b ≤ ↑k
state_after: α : Type u_1
β : Type u_2
inst✝³ : Monoid α
inst✝² : Monoid β
inst✝¹ : DecidableRel fun x x_1 => x ∣ x_1
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
a b : α
k : ℕ
hk : a ^ k ∣ b
hsucc : ¬a ^ (k + 1) ∣ b
this : Finite a b
⊢ ∃ (h : (multiplicity a b).Dom), (multiplicity a b).get h ≤ k

tactic: exact ⟨this, Nat.find_min' _ hsucc⟩
state_before: α : Type u_1
β : Type u_2
inst✝³ : Monoid α
inst✝² : Monoid β
inst✝¹ : DecidableRel fun x x_1 => x ∣ x_1
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
a b : α
k : ℕ
hk : a ^ k ∣ b
hsucc : ¬a ^ (k + 1) ∣ b
this : Finite a b
⊢ ∃ (h : (multiplicity a b).Dom), (multiplicity a b).get h ≤ k
state_after: no goals
Theorem: Equiv.self_trans_symm
File: Mathlib/Logic/Equiv/Defs.lean

tactic: simp
state_before: α : Sort u
β : Sort v
γ : Sort w
e : α ≃ β
⊢ ∀ (x : α), (e.trans e.symm) x = (Equiv.refl α) x
state_after: no goals
Theorem: MeasureTheory.upperCrossingTime_lt_bddAbove
File: Mathlib/Probability/Martingale/Upcrossing.lean

tactic: obtain ⟨k, hk⟩ := exists_upperCrossingTime_eq f N ω hab
state_before: Ω : Type u_1
ι : Type u_2
m0 : MeasurableSpace Ω
μ : Measure Ω
a b : ℝ
f : ℕ → Ω → ℝ
N n m : ℕ
ω : Ω
hab : a < b
⊢ BddAbove {n | upperCrossingTime a b f N n ω < N}
state_after: case intro
Ω : Type u_1
ι : Type u_2
m0 : MeasurableSpace Ω
μ : Measure Ω
a b : ℝ
f : ℕ → Ω → ℝ
N n m : ℕ
ω : Ω
hab : a < b
k : ℕ
hk : upperCrossingTime a b f N k ω = N
⊢ BddAbove {n | upperCrossingTime a b f N n ω < N}

tactic: refine ⟨k, fun n (hn : upperCrossingTime a b f N n ω < N) => ?_⟩
state_before: case intro
Ω : Type u_1
ι : Type u_2
m0 : MeasurableSpace Ω
μ : Measure Ω
a b : ℝ
f : ℕ → Ω → ℝ
N n m : ℕ
ω : Ω
hab : a < b
k : ℕ
hk : upperCrossingTime a b f N k ω = N
⊢ BddAbove {n | upperCrossingTime a b f N n ω < N}
state_after: case intro
Ω : Type u_1
ι : Type u_2
m0 : MeasurableSpace Ω
μ : Measure Ω
a b : ℝ
f : ℕ → Ω → ℝ
N n✝ m : ℕ
ω : Ω
hab : a < b
k : ℕ
hk : upperCrossingTime a b f N k ω = N
n : ℕ
hn : upperCrossingTime a b f N n ω < N
⊢ n ≤ k

tactic: by_contra hn'
state_before: case intro
Ω : Type u_1
ι : Type u_2
m0 : MeasurableSpace Ω
μ : Measure Ω
a b : ℝ
f : ℕ → Ω → ℝ
N n✝ m : ℕ
ω : Ω
hab : a < b
k : ℕ
hk : upperCrossingTime a b f N k ω = N
n : ℕ
hn : upperCrossingTime a b f N n ω < N
⊢ n ≤ k
state_after: case intro
Ω : Type u_1
ι : Type u_2
m0 : MeasurableSpace Ω
μ : Measure Ω
a b : ℝ
f : ℕ → Ω → ℝ
N n✝ m : ℕ
ω : Ω
hab : a < b
k : ℕ
hk : upperCrossingTime a b f N k ω = N
n : ℕ
hn : upperCrossingTime a b f N n ω < N
hn' : ¬n ≤ k
⊢ False

tactic: exact hn.ne (upperCrossingTime_stabilize (not_le.1 hn').le hk)
state_before: case intro
Ω : Type u_1
ι : Type u_2
m0 : MeasurableSpace Ω
μ : Measure Ω
a b : ℝ
f : ℕ → Ω → ℝ
N n✝ m : ℕ
ω : Ω
hab : a < b
k : ℕ
hk : upperCrossingTime a b f N k ω = N
n : ℕ
hn : upperCrossingTime a b f N n ω < N
hn' : ¬n ≤ k
⊢ False
state_after: no goals