1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: Finset.left_mem_Icc
File: Mathlib/Order/Interval/Finset/Basic.lean

tactic: simp only [mem_Icc, true_and_iff, le_rfl]
state_before: ι : Type u_1
α : Type u_2
inst✝¹ : Preorder α
inst✝ : LocallyFiniteOrder α
a a₁ a₂ b b₁ b₂ c x : α
⊢ a ∈ Icc a b ↔ a ≤ b
state_after: no goals
Theorem: exists_open_nhds_one_split
File: Mathlib/Topology/Algebra/Monoid.lean

tactic: have : (fun a : M × M => a.1 * a.2) ⁻¹' s ∈ 𝓝 ((1, 1) : M × M) :=
  tendsto_mul (by simpa only [one_mul] using hs)
state_before: ι : Type u_1
α : Type u_2
M : Type u_3
N : Type u_4
X : Type u_5
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace M
inst✝¹ : MulOneClass M
inst✝ : ContinuousMul M
s : Set M
hs : s ∈ 𝓝 1
⊢ ∃ V, IsOpen V ∧ 1 ∈ V ∧ ∀ v ∈ V, ∀ w ∈ V, v * w ∈ s
state_after: ι : Type u_1
α : Type u_2
M : Type u_3
N : Type u_4
X : Type u_5
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace M
inst✝¹ : MulOneClass M
inst✝ : ContinuousMul M
s : Set M
hs : s ∈ 𝓝 1
this : (fun a => a.1 * a.2) ⁻¹' s ∈ 𝓝 (1, 1)
⊢ ∃ V, IsOpen V ∧ 1 ∈ V ∧ ∀ v ∈ V, ∀ w ∈ V, v * w ∈ s

tactic: simpa only [prod_subset_iff] using exists_nhds_square this
state_before: ι : Type u_1
α : Type u_2
M : Type u_3
N : Type u_4
X : Type u_5
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace M
inst✝¹ : MulOneClass M
inst✝ : ContinuousMul M
s : Set M
hs : s ∈ 𝓝 1
this : (fun a => a.1 * a.2) ⁻¹' s ∈ 𝓝 (1, 1)
⊢ ∃ V, IsOpen V ∧ 1 ∈ V ∧ ∀ v ∈ V, ∀ w ∈ V, v * w ∈ s
state_after: no goals

tactic: simpa only [one_mul] using hs
state_before: ι : Type u_1
α : Type u_2
M : Type u_3
N : Type u_4
X : Type u_5
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace M
inst✝¹ : MulOneClass M
inst✝ : ContinuousMul M
s : Set M
hs : s ∈ 𝓝 1
⊢ s ∈ 𝓝 (1 * 1)
state_after: no goals
Theorem: CategoryTheory.ShortComplex.RightHomologyData.ofZeros_g'
File: Mathlib/Algebra/Homology/ShortComplex/RightHomology.lean

tactic: rw [← cancel_epi ((ofZeros S hf hg).p), comp_zero, p_g', hg]
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
h : S.RightHomologyData
A : C
hf : S.f = 0
hg : S.g = 0
⊢ (ofZeros S hf hg).g' = 0
state_after: no goals
Theorem: Equiv.prod_assoc_symm_image
File: Mathlib/Logic/Equiv/Set.lean

tactic: simpa only [Equiv.image_eq_preimage] using prod_assoc_preimage
state_before: α✝ : Sort u
β✝ : Sort v
γ✝ : Sort w
α : Type u_1
β : Type u_2
γ : Type u_3
s : Set α
t : Set β
u : Set γ
⊢ ⇑(prodAssoc α β γ).symm '' s ×ˢ t ×ˢ u = (s ×ˢ t) ×ˢ u
state_after: no goals
Theorem: AddMonoidAlgebra.divOf_add
File: Mathlib/Algebra/MonoidAlgebra/Division.lean

tactic: refine Finsupp.ext fun _ => ?_
state_before: k : Type u_1
G : Type u_2
inst✝¹ : Semiring k
inst✝ : AddCancelCommMonoid G
x : k[G]
a b : G
⊢ x /ᵒᶠ (a + b) = x /ᵒᶠ a /ᵒᶠ b
state_after: k : Type u_1
G : Type u_2
inst✝¹ : Semiring k
inst✝ : AddCancelCommMonoid G
x : k[G]
a b x✝ : G
⊢ (x /ᵒᶠ (a + b)) x✝ = (x /ᵒᶠ a /ᵒᶠ b) x✝

tactic: simp only [AddMonoidAlgebra.divOf_apply, add_assoc]
state_before: k : Type u_1
G : Type u_2
inst✝¹ : Semiring k
inst✝ : AddCancelCommMonoid G
x : k[G]
a b x✝ : G
⊢ (x /ᵒᶠ (a + b)) x✝ = (x /ᵒᶠ a /ᵒᶠ b) x✝
state_after: no goals
Theorem: Real.rpow_logb_eq_abs
File: Mathlib/Analysis/SpecialFunctions/Log/Base.lean

tactic: apply log_injOn_pos
state_before: b x y : ℝ
b_pos : 0 < b
b_ne_one : b ≠ 1
hx : x ≠ 0
⊢ b ^ logb b x = |x|
state_after: case a
b x y : ℝ
b_pos : 0 < b
b_ne_one : b ≠ 1
hx : x ≠ 0
⊢ b ^ logb b x ∈ Ioi 0

case a
b x y : ℝ
b_pos : 0 < b
b_ne_one : b ≠ 1
hx : x ≠ 0
⊢ |x| ∈ Ioi 0

case a
b x y : ℝ
b_pos : 0 < b
b_ne_one : b ≠ 1
hx : x ≠ 0
⊢ log (b ^ logb b x) = log |x|

tactic: rw [log_rpow b_pos, logb, log_abs]
state_before: case a
b x y : ℝ
b_pos : 0 < b
b_ne_one : b ≠ 1
hx : x ≠ 0
⊢ log (b ^ logb b x) = log |x|
state_after: case a
b x y : ℝ
b_pos : 0 < b
b_ne_one : b ≠ 1
hx : x ≠ 0
⊢ log x / log b * log b = log x

tactic: field_simp [log_b_ne_zero b_pos b_ne_one]
state_before: case a
b x y : ℝ
b_pos : 0 < b
b_ne_one : b ≠ 1
hx : x ≠ 0
⊢ log x / log b * log b = log x
state_after: no goals

tactic: simp only [Set.mem_Ioi]
state_before: case a
b x y : ℝ
b_pos : 0 < b
b_ne_one : b ≠ 1
hx : x ≠ 0
⊢ b ^ logb b x ∈ Ioi 0
state_after: case a
b x y : ℝ
b_pos : 0 < b
b_ne_one : b ≠ 1
hx : x ≠ 0
⊢ 0 < b ^ logb b x

tactic: apply rpow_pos_of_pos b_pos
state_before: case a
b x y : ℝ
b_pos : 0 < b
b_ne_one : b ≠ 1
hx : x ≠ 0
⊢ 0 < b ^ logb b x
state_after: no goals

tactic: simp only [abs_pos, mem_Ioi, Ne, hx, not_false_iff]
state_before: case a
b x y : ℝ
b_pos : 0 < b
b_ne_one : b ≠ 1
hx : x ≠ 0
⊢ |x| ∈ Ioi 0
state_after: no goals
Theorem: WittVector.constantCoeff_wittMul
File: Mathlib/RingTheory/WittVector/Defs.lean

tactic: apply constantCoeff_wittStructureInt p _ _ n
state_before: p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝ : CommRing R
n : ℕ
⊢ constantCoeff (wittMul p n) = 0
state_after: p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝ : CommRing R
n : ℕ
⊢ constantCoeff (X 0 * X 1) = 0

tactic: simp only [mul_zero, RingHom.map_mul, constantCoeff_X]
state_before: p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝ : CommRing R
n : ℕ
⊢ constantCoeff (X 0 * X 1) = 0
state_after: no goals
Theorem: Ordinal.toNatOrdinal_cast_nat
File: Mathlib/SetTheory/Ordinal/NaturalOps.lean

tactic: rw [← toOrdinal_cast_nat n]
state_before: n : ℕ
⊢ toNatOrdinal ↑n = ↑n
state_after: n : ℕ
⊢ toNatOrdinal (toOrdinal ↑n) = ↑n

tactic: rfl
state_before: n : ℕ
⊢ toNatOrdinal (toOrdinal ↑n) = ↑n
state_after: no goals
Theorem: Ring.multichoose_one
File: Mathlib/RingTheory/Binomial.lean

tactic: induction k with
| zero => exact multichoose_zero_right 1
| succ n ih =>
  rw [show (1 : R) = 0 + 1 by exact (@zero_add R _ 1).symm, multichoose_succ_succ,
    multichoose_zero_succ, zero_add, zero_add, ih]
state_before: R✝ : Type u_1
inst✝⁶ : AddCommMonoid R✝
inst✝⁵ : Pow R✝ ℕ
inst✝⁴ : BinomialRing R✝
R : Type u_2
inst✝³ : NonAssocSemiring R
inst✝² : Pow R ℕ
inst✝¹ : NatPowAssoc R
inst✝ : BinomialRing R
k : ℕ
⊢ multichoose 1 k = 1
state_after: no goals

tactic: exact multichoose_zero_right 1
state_before: case zero
R✝ : Type u_1
inst✝⁶ : AddCommMonoid R✝
inst✝⁵ : Pow R✝ ℕ
inst✝⁴ : BinomialRing R✝
R : Type u_2
inst✝³ : NonAssocSemiring R
inst✝² : Pow R ℕ
inst✝¹ : NatPowAssoc R
inst✝ : BinomialRing R
⊢ multichoose 1 0 = 1
state_after: no goals

tactic: rw [show (1 : R) = 0 + 1 by exact (@zero_add R _ 1).symm, multichoose_succ_succ,
  multichoose_zero_succ, zero_add, zero_add, ih]
state_before: case succ
R✝ : Type u_1
inst✝⁶ : AddCommMonoid R✝
inst✝⁵ : Pow R✝ ℕ
inst✝⁴ : BinomialRing R✝
R : Type u_2
inst✝³ : NonAssocSemiring R
inst✝² : Pow R ℕ
inst✝¹ : NatPowAssoc R
inst✝ : BinomialRing R
n : ℕ
ih : multichoose 1 n = 1
⊢ multichoose 1 (n + 1) = 1
state_after: no goals

tactic: exact (@zero_add R _ 1).symm
state_before: R✝ : Type u_1
inst✝⁶ : AddCommMonoid R✝
inst✝⁵ : Pow R✝ ℕ
inst✝⁴ : BinomialRing R✝
R : Type u_2
inst✝³ : NonAssocSemiring R
inst✝² : Pow R ℕ
inst✝¹ : NatPowAssoc R
inst✝ : BinomialRing R
n : ℕ
ih : multichoose 1 n = 1
⊢ 1 = 0 + 1
state_after: no goals
Theorem: ENNReal.mul_rpow_of_ne_top
File: Mathlib/Analysis/SpecialFunctions/Pow/NNReal.lean

tactic: simp [*, mul_rpow_eq_ite]
state_before: x y : ℝ≥0∞
hx : x ≠ ⊤
hy : y ≠ ⊤
z : ℝ
⊢ (x * y) ^ z = x ^ z * y ^ z
state_after: no goals
Theorem: PartialHomeomorph.extend_left_inv
File: Mathlib/Geometry/Manifold/SmoothManifoldWithCorners.lean

tactic: rwa [f.extend_source]
state_before: 𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : PartialHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
s t : Set M
x : M
hxf : x ∈ f.source
⊢ x ∈ (f.extend I).source
state_after: no goals
Theorem: MeasureTheory.L1.setToL1_smul
File: Mathlib/MeasureTheory/Integral/SetToL1.lean

tactic: rw [setToL1_eq_setToL1' hT h_smul, setToL1_eq_setToL1' hT h_smul]
state_before: α : Type u_1
E : Type u_2
F : Type u_3
F' : Type u_4
G : Type u_5
𝕜 : Type u_6
p : ℝ≥0∞
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : NormedSpace ℝ E
inst✝⁸ : NormedAddCommGroup F
inst✝⁷ : NormedSpace ℝ F
inst✝⁶ : NormedAddCommGroup F'
inst✝⁵ : NormedSpace ℝ F'
inst✝⁴ : NormedAddCommGroup G
m : MeasurableSpace α
μ : Measure α
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 E
inst✝¹ : NormedSpace 𝕜 F
inst✝ : CompleteSpace F
T T' T'' : Set α → E →L[ℝ] F
C C' C'' : ℝ
hT : DominatedFinMeasAdditive μ T C
h_smul : ∀ (c : 𝕜) (s : Set α) (x : E), (T s) (c • x) = c • (T s) x
c : 𝕜
f : ↥(Lp E 1 μ)
⊢ (setToL1 hT) (c • f) = c • (setToL1 hT) f
state_after: α : Type u_1
E : Type u_2
F : Type u_3
F' : Type u_4
G : Type u_5
𝕜 : Type u_6
p : ℝ≥0∞
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : NormedSpace ℝ E
inst✝⁸ : NormedAddCommGroup F
inst✝⁷ : NormedSpace ℝ F
inst✝⁶ : NormedAddCommGroup F'
inst✝⁵ : NormedSpace ℝ F'
inst✝⁴ : NormedAddCommGroup G
m : MeasurableSpace α
μ : Measure α
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 E
inst✝¹ : NormedSpace 𝕜 F
inst✝ : CompleteSpace F
T T' T'' : Set α → E →L[ℝ] F
C C' C'' : ℝ
hT : DominatedFinMeasAdditive μ T C
h_smul : ∀ (c : 𝕜) (s : Set α) (x : E), (T s) (c • x) = c • (T s) x
c : 𝕜
f : ↥(Lp E 1 μ)
⊢ (setToL1' 𝕜 hT h_smul) (c • f) = c • (setToL1' 𝕜 hT h_smul) f

tactic: exact ContinuousLinearMap.map_smul _ _ _
state_before: α : Type u_1
E : Type u_2
F : Type u_3
F' : Type u_4
G : Type u_5
𝕜 : Type u_6
p : ℝ≥0∞
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : NormedSpace ℝ E
inst✝⁸ : NormedAddCommGroup F
inst✝⁷ : NormedSpace ℝ F
inst✝⁶ : NormedAddCommGroup F'
inst✝⁵ : NormedSpace ℝ F'
inst✝⁴ : NormedAddCommGroup G
m : MeasurableSpace α
μ : Measure α
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 E
inst✝¹ : NormedSpace 𝕜 F
inst✝ : CompleteSpace F
T T' T'' : Set α → E →L[ℝ] F
C C' C'' : ℝ
hT : DominatedFinMeasAdditive μ T C
h_smul : ∀ (c : 𝕜) (s : Set α) (x : E), (T s) (c • x) = c • (T s) x
c : 𝕜
f : ↥(Lp E 1 μ)
⊢ (setToL1' 𝕜 hT h_smul) (c • f) = c • (setToL1' 𝕜 hT h_smul) f
state_after: no goals
Theorem: integralClosure.isIntegral
File: Mathlib/RingTheory/IntegralClosure.lean

tactic: rwa [← aeval_def, ← Subalgebra.val_apply, aeval_algHom_apply] at hpx
state_before: R : Type u_1
A : Type u_2
B : Type u_3
S : Type u_4
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Ring B
inst✝² : CommRing S
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f✝¹ : R →+* S
f✝ : R →+* B
f : R →+* S
x : ↥(integralClosure R A)
p : R[X]
hpm : p.Monic
hpx : eval₂ (algebraMap R A) (↑x) p = 0
⊢ ↑(eval₂ (algebraMap R ↥(integralClosure R A)) x p) = ↑0
state_after: no goals
Theorem: Fin.natCast_le_natCast
File: Mathlib/Data/Fin/Basic.lean

tactic: rw [← Nat.lt_succ_iff] at han hbn
state_before: n m a b : ℕ
han : a ≤ n
hbn : b ≤ n
⊢ ↑a ≤ ↑b ↔ a ≤ b
state_after: n m a b : ℕ
han : a < n.succ
hbn : b < n.succ
⊢ ↑a ≤ ↑b ↔ a ≤ b

tactic: simp [le_iff_val_le_val, -val_fin_le, Nat.mod_eq_of_lt, han, hbn]
state_before: n m a b : ℕ
han : a < n.succ
hbn : b < n.succ
⊢ ↑a ≤ ↑b ↔ a ≤ b
state_after: no goals
Theorem: Polynomial.hasseDeriv_X
File: Mathlib/Algebra/Polynomial/HasseDeriv.lean

tactic: rw [← monomial_one_one_eq_X, hasseDeriv_monomial, Nat.choose_eq_zero_of_lt hk, Nat.cast_zero,
  zero_mul, monomial_zero_right]
state_before: R : Type u_1
inst✝ : Semiring R
k : ℕ
f : R[X]
hk : 1 < k
⊢ (hasseDeriv k) X = 0
state_after: no goals
Theorem: lowerClosure_infs
File: Mathlib/Data/Set/Sups.lean

tactic: ext a
state_before: F : Type u_1
α : Type u_2
β : Type u_3
inst✝ : SemilatticeInf α
s t : Set α
⊢ lowerClosure (s ⊼ t) = lowerClosure s ⊓ lowerClosure t
state_after: case a.h
F : Type u_1
α : Type u_2
β : Type u_3
inst✝ : SemilatticeInf α
s t : Set α
a : α
⊢ a ∈ ↑(lowerClosure (s ⊼ t)) ↔ a ∈ ↑(lowerClosure s ⊓ lowerClosure t)

tactic: simp only [SetLike.mem_coe, mem_lowerClosure, Set.mem_infs, exists_and_left, exists_prop,
  LowerSet.coe_sup, Set.mem_inter_iff]
state_before: case a.h
F : Type u_1
α : Type u_2
β : Type u_3
inst✝ : SemilatticeInf α
s t : Set α
a : α
⊢ a ∈ ↑(lowerClosure (s ⊼ t)) ↔ a ∈ ↑(lowerClosure s ⊓ lowerClosure t)
state_after: case a.h
F : Type u_1
α : Type u_2
β : Type u_3
inst✝ : SemilatticeInf α
s t : Set α
a : α
⊢ (∃ a_1, (∃ a ∈ s, ∃ b ∈ t, a ⊓ b = a_1) ∧ a ≤ a_1) ↔ a ∈ lowerClosure s ⊓ lowerClosure t

tactic: constructor
state_before: case a.h
F : Type u_1
α : Type u_2
β : Type u_3
inst✝ : SemilatticeInf α
s t : Set α
a : α
⊢ (∃ a_1, (∃ a ∈ s, ∃ b ∈ t, a ⊓ b = a_1) ∧ a ≤ a_1) ↔ a ∈ lowerClosure s ⊓ lowerClosure t
state_after: case a.h.mp
F : Type u_1
α : Type u_2
β : Type u_3
inst✝ : SemilatticeInf α
s t : Set α
a : α
⊢ (∃ a_1, (∃ a ∈ s, ∃ b ∈ t, a ⊓ b = a_1) ∧ a ≤ a_1) → a ∈ lowerClosure s ⊓ lowerClosure t

case a.h.mpr
F : Type u_1
α : Type u_2
β : Type u_3
inst✝ : SemilatticeInf α
s t : Set α
a : α
⊢ a ∈ lowerClosure s ⊓ lowerClosure t → ∃ a_2, (∃ a ∈ s, ∃ b ∈ t, a ⊓ b = a_2) ∧ a ≤ a_2

tactic: rintro ⟨_, ⟨b, hb, c, hc, rfl⟩, ha⟩
state_before: case a.h.mp
F : Type u_1
α : Type u_2
β : Type u_3
inst✝ : SemilatticeInf α
s t : Set α
a : α
⊢ (∃ a_1, (∃ a ∈ s, ∃ b ∈ t, a ⊓ b = a_1) ∧ a ≤ a_1) → a ∈ lowerClosure s ⊓ lowerClosure t
state_after: case a.h.mp.intro.intro.intro.intro.intro.intro
F : Type u_1
α : Type u_2
β : Type u_3
inst✝ : SemilatticeInf α
s t : Set α
a b : α
hb : b ∈ s
c : α
hc : c ∈ t
ha : a ≤ b ⊓ c
⊢ a ∈ lowerClosure s ⊓ lowerClosure t

tactic: exact ⟨⟨b, hb, ha.trans inf_le_left⟩, c, hc, ha.trans inf_le_right⟩
state_before: case a.h.mp.intro.intro.intro.intro.intro.intro
F : Type u_1
α : Type u_2
β : Type u_3
inst✝ : SemilatticeInf α
s t : Set α
a b : α
hb : b ∈ s
c : α
hc : c ∈ t
ha : a ≤ b ⊓ c
⊢ a ∈ lowerClosure s ⊓ lowerClosure t
state_after: no goals

tactic: rintro ⟨⟨b, hb, hab⟩, c, hc, hac⟩
state_before: case a.h.mpr
F : Type u_1
α : Type u_2
β : Type u_3
inst✝ : SemilatticeInf α
s t : Set α
a : α
⊢ a ∈ lowerClosure s ⊓ lowerClosure t → ∃ a_2, (∃ a ∈ s, ∃ b ∈ t, a ⊓ b = a_2) ∧ a ≤ a_2
state_after: case a.h.mpr.intro.intro.intro.intro.intro
F : Type u_1
α : Type u_2
β : Type u_3
inst✝ : SemilatticeInf α
s t : Set α
a b : α
hb : b ∈ s
hab : a ≤ b
c : α
hc : c ∈ t
hac : a ≤ c
⊢ ∃ a_1, (∃ a ∈ s, ∃ b ∈ t, a ⊓ b = a_1) ∧ a ≤ a_1

tactic: exact ⟨_, ⟨b, hb, c, hc, rfl⟩, le_inf hab hac⟩
state_before: case a.h.mpr.intro.intro.intro.intro.intro
F : Type u_1
α : Type u_2
β : Type u_3
inst✝ : SemilatticeInf α
s t : Set α
a b : α
hb : b ∈ s
hab : a ≤ b
c : α
hc : c ∈ t
hac : a ≤ c
⊢ ∃ a_1, (∃ a ∈ s, ∃ b ∈ t, a ⊓ b = a_1) ∧ a ≤ a_1
state_after: no goals
Theorem: Matrix.vecAppend_eq_ite
File: Mathlib/Data/Fin/VecNotation.lean

tactic: omega
state_before: α✝ : Type u
m n o✝ : ℕ
m' : Type u_1
n' : Type u_2
o' : Type u_3
α : Type u_4
o : ℕ
ho : o = m + n
u : Fin m → α
v : Fin n → α
i : Fin o
h : ¬↑i < m
⊢ ↑i - m < n
state_after: no goals

tactic: ext i
state_before: α✝ : Type u
m n o✝ : ℕ
m' : Type u_1
n' : Type u_2
o' : Type u_3
α : Type u_4
o : ℕ
ho : o = m + n
u : Fin m → α
v : Fin n → α
⊢ vecAppend ho u v = fun i => if h : ↑i < m then u ⟨↑i, h⟩ else v ⟨↑i - m, ⋯⟩
state_after: case h
α✝ : Type u
m n o✝ : ℕ
m' : Type u_1
n' : Type u_2
o' : Type u_3
α : Type u_4
o : ℕ
ho : o = m + n
u : Fin m → α
v : Fin n → α
i : Fin o
⊢ vecAppend ho u v i = if h : ↑i < m then u ⟨↑i, h⟩ else v ⟨↑i - m, ⋯⟩

tactic: rw [vecAppend, Fin.append, Function.comp_apply, Fin.addCases]
state_before: case h
α✝ : Type u
m n o✝ : ℕ
m' : Type u_1
n' : Type u_2
o' : Type u_3
α : Type u_4
o : ℕ
ho : o = m + n
u : Fin m → α
v : Fin n → α
i : Fin o
⊢ vecAppend ho u v i = if h : ↑i < m then u ⟨↑i, h⟩ else v ⟨↑i - m, ⋯⟩
state_after: case h
α✝ : Type u
m n o✝ : ℕ
m' : Type u_1
n' : Type u_2
o' : Type u_3
α : Type u_4
o : ℕ
ho : o = m + n
u : Fin m → α
v : Fin n → α
i : Fin o
⊢ (if hi : ↑(Fin.cast ho i) < m then ⋯ ▸ u ((Fin.cast ho i).castLT hi)
    else ⋯ ▸ v (Fin.subNat m (Fin.cast ⋯ (Fin.cast ho i)) ⋯)) =
    if h : ↑i < m then u ⟨↑i, h⟩ else v ⟨↑i - m, ⋯⟩

tactic: congr with hi
state_before: case h
α✝ : Type u
m n o✝ : ℕ
m' : Type u_1
n' : Type u_2
o' : Type u_3
α : Type u_4
o : ℕ
ho : o = m + n
u : Fin m → α
v : Fin n → α
i : Fin o
⊢ (if hi : ↑(Fin.cast ho i) < m then ⋯ ▸ u ((Fin.cast ho i).castLT hi)
    else ⋯ ▸ v (Fin.subNat m (Fin.cast ⋯ (Fin.cast ho i)) ⋯)) =
    if h : ↑i < m then u ⟨↑i, h⟩ else v ⟨↑i - m, ⋯⟩
state_after: case h.e_e.h
α✝ : Type u
m n o✝ : ℕ
m' : Type u_1
n' : Type u_2
o' : Type u_3
α : Type u_4
o : ℕ
ho : o = m + n
u : Fin m → α
v : Fin n → α
i : Fin o
hi : ¬↑(Fin.cast ho i) < m
⊢ ⋯ ▸ v (Fin.subNat m (Fin.cast ⋯ (Fin.cast ho i)) ⋯) = v ⟨↑i - m, ⋯⟩

tactic: simp only [eq_rec_constant]
state_before: case h.e_e.h
α✝ : Type u
m n o✝ : ℕ
m' : Type u_1
n' : Type u_2
o' : Type u_3
α : Type u_4
o : ℕ
ho : o = m + n
u : Fin m → α
v : Fin n → α
i : Fin o
hi : ¬↑(Fin.cast ho i) < m
⊢ ⋯ ▸ v (Fin.subNat m (Fin.cast ⋯ (Fin.cast ho i)) ⋯) = v ⟨↑i - m, ⋯⟩
state_after: case h.e_e.h
α✝ : Type u
m n o✝ : ℕ
m' : Type u_1
n' : Type u_2
o' : Type u_3
α : Type u_4
o : ℕ
ho : o = m + n
u : Fin m → α
v : Fin n → α
i : Fin o
hi : ¬↑(Fin.cast ho i) < m
⊢ v (Fin.subNat m (Fin.cast ⋯ (Fin.cast ho i)) ⋯) = v ⟨↑i - m, ⋯⟩

tactic: rfl
state_before: case h.e_e.h
α✝ : Type u
m n o✝ : ℕ
m' : Type u_1
n' : Type u_2
o' : Type u_3
α : Type u_4
o : ℕ
ho : o = m + n
u : Fin m → α
v : Fin n → α
i : Fin o
hi : ¬↑(Fin.cast ho i) < m
⊢ v (Fin.subNat m (Fin.cast ⋯ (Fin.cast ho i)) ⋯) = v ⟨↑i - m, ⋯⟩
state_after: no goals
Theorem: MeasureTheory.IsSetSemiring.pairwiseDisjoint_diffFinset₀
File: Mathlib/MeasureTheory/SetSemiring.lean

tactic: classical
simp only [diffFinset₀, coe_sdiff, coe_singleton]
exact Set.PairwiseDisjoint.subset
  (hC.exists_disjoint_finset_diff_eq hs hI).choose_spec.2.1 diff_subset
state_before: α : Type u_1
C : Set (Set α)
s t : Set α
I : Finset (Set α)
hC : IsSetSemiring C
hs : s ∈ C
hI : ↑I ⊆ C
⊢ (↑(hC.diffFinset₀ hs hI)).PairwiseDisjoint id
state_after: no goals

tactic: simp only [diffFinset₀, coe_sdiff, coe_singleton]
state_before: α : Type u_1
C : Set (Set α)
s t : Set α
I : Finset (Set α)
hC : IsSetSemiring C
hs : s ∈ C
hI : ↑I ⊆ C
⊢ (↑(hC.diffFinset₀ hs hI)).PairwiseDisjoint id
state_after: α : Type u_1
C : Set (Set α)
s t : Set α
I : Finset (Set α)
hC : IsSetSemiring C
hs : s ∈ C
hI : ↑I ⊆ C
⊢ (↑⋯.choose \ {∅}).PairwiseDisjoint id

tactic: exact Set.PairwiseDisjoint.subset
  (hC.exists_disjoint_finset_diff_eq hs hI).choose_spec.2.1 diff_subset
state_before: α : Type u_1
C : Set (Set α)
s t : Set α
I : Finset (Set α)
hC : IsSetSemiring C
hs : s ∈ C
hI : ↑I ⊆ C
⊢ (↑⋯.choose \ {∅}).PairwiseDisjoint id
state_after: no goals
Theorem: IsAdjoinRootMonic.modByMonicHom_root_pow
File: Mathlib/RingTheory/IsAdjoinRoot.lean

tactic: nontriviality R
state_before: R : Type u
S : Type v
inst✝² : CommRing R
inst✝¹ : Ring S
f : R[X]
inst✝ : Algebra R S
h : IsAdjoinRootMonic S f
n : ℕ
hdeg : n < f.natDegree
⊢ h.modByMonicHom (h.root ^ n) = X ^ n
state_after: R : Type u
S : Type v
inst✝² : CommRing R
inst✝¹ : Ring S
f : R[X]
inst✝ : Algebra R S
h : IsAdjoinRootMonic S f
n : ℕ
hdeg : n < f.natDegree
a✝ : Nontrivial R
⊢ h.modByMonicHom (h.root ^ n) = X ^ n

tactic: rw [← h.map_X, ← map_pow, modByMonicHom_map, modByMonic_eq_self_iff h.Monic, degree_X_pow]
state_before: R : Type u
S : Type v
inst✝² : CommRing R
inst✝¹ : Ring S
f : R[X]
inst✝ : Algebra R S
h : IsAdjoinRootMonic S f
n : ℕ
hdeg : n < f.natDegree
a✝ : Nontrivial R
⊢ h.modByMonicHom (h.root ^ n) = X ^ n
state_after: R : Type u
S : Type v
inst✝² : CommRing R
inst✝¹ : Ring S
f : R[X]
inst✝ : Algebra R S
h : IsAdjoinRootMonic S f
n : ℕ
hdeg : n < f.natDegree
a✝ : Nontrivial R
⊢ ↑n < f.degree

tactic: contrapose! hdeg
state_before: R : Type u
S : Type v
inst✝² : CommRing R
inst✝¹ : Ring S
f : R[X]
inst✝ : Algebra R S
h : IsAdjoinRootMonic S f
n : ℕ
hdeg : n < f.natDegree
a✝ : Nontrivial R
⊢ ↑n < f.degree
state_after: R : Type u
S : Type v
inst✝² : CommRing R
inst✝¹ : Ring S
f : R[X]
inst✝ : Algebra R S
h : IsAdjoinRootMonic S f
n : ℕ
a✝ : Nontrivial R
hdeg : f.degree ≤ ↑n
⊢ f.natDegree ≤ n

tactic: simpa [natDegree_le_iff_degree_le] using hdeg
state_before: R : Type u
S : Type v
inst✝² : CommRing R
inst✝¹ : Ring S
f : R[X]
inst✝ : Algebra R S
h : IsAdjoinRootMonic S f
n : ℕ
a✝ : Nontrivial R
hdeg : f.degree ≤ ↑n
⊢ f.natDegree ≤ n
state_after: no goals
Theorem: List.map_surjective_iff
File: Mathlib/Data/List/Basic.lean

tactic: let ⟨[y], hxy⟩ := h [x]
state_before: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
f : α → β
h : Surjective (map f)
x : β
⊢ ∃ a, f a = x
state_after: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
f : α → β
h : Surjective (map f)
x : β
y : α
hxy : map f [y] = [x]
⊢ ∃ a, f a = x

tactic: exact ⟨_, List.singleton_injective hxy⟩
state_before: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
f : α → β
h : Surjective (map f)
x : β
y : α
hxy : map f [y] = [x]
⊢ ∃ a, f a = x
state_after: no goals
Theorem: aux_hasSum_of_le_geometric
File: Mathlib/Analysis/SpecificLimits/Basic.lean

tactic: rcases sign_cases_of_C_mul_pow_nonneg fun n ↦ dist_nonneg.trans (hu n) with (rfl | ⟨_, r₀⟩)
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : PseudoMetricSpace α
r C : ℝ
hr : r < 1
f : ℕ → α
hu : ∀ (n : ℕ), dist (f n) (f (n + 1)) ≤ C * r ^ n
⊢ HasSum (fun n => C * r ^ n) (C / (1 - r))
state_after: case inl
α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : PseudoMetricSpace α
r : ℝ
hr : r < 1
f : ℕ → α
hu : ∀ (n : ℕ), dist (f n) (f (n + 1)) ≤ 0 * r ^ n
⊢ HasSum (fun n => 0 * r ^ n) (0 / (1 - r))

case inr.intro
α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : PseudoMetricSpace α
r C : ℝ
hr : r < 1
f : ℕ → α
hu : ∀ (n : ℕ), dist (f n) (f (n + 1)) ≤ C * r ^ n
left✝ : 0 < C
r₀ : 0 ≤ r
⊢ HasSum (fun n => C * r ^ n) (C / (1 - r))

tactic: simp [hasSum_zero]
state_before: case inl
α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : PseudoMetricSpace α
r : ℝ
hr : r < 1
f : ℕ → α
hu : ∀ (n : ℕ), dist (f n) (f (n + 1)) ≤ 0 * r ^ n
⊢ HasSum (fun n => 0 * r ^ n) (0 / (1 - r))
state_after: no goals

tactic: refine HasSum.mul_left C ?_
state_before: case inr.intro
α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : PseudoMetricSpace α
r C : ℝ
hr : r < 1
f : ℕ → α
hu : ∀ (n : ℕ), dist (f n) (f (n + 1)) ≤ C * r ^ n
left✝ : 0 < C
r₀ : 0 ≤ r
⊢ HasSum (fun n => C * r ^ n) (C / (1 - r))
state_after: case inr.intro
α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : PseudoMetricSpace α
r C : ℝ
hr : r < 1
f : ℕ → α
hu : ∀ (n : ℕ), dist (f n) (f (n + 1)) ≤ C * r ^ n
left✝ : 0 < C
r₀ : 0 ≤ r
⊢ HasSum (HPow.hPow r) (1 - r)⁻¹

tactic: simpa using hasSum_geometric_of_lt_one r₀ hr
state_before: case inr.intro
α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : PseudoMetricSpace α
r C : ℝ
hr : r < 1
f : ℕ → α
hu : ∀ (n : ℕ), dist (f n) (f (n + 1)) ≤ C * r ^ n
left✝ : 0 < C
r₀ : 0 ≤ r
⊢ HasSum (HPow.hPow r) (1 - r)⁻¹
state_after: no goals
Theorem: Equiv.pow_mulRight
File: Mathlib/GroupTheory/Perm/Basic.lean

tactic: ext
state_before: α : Type u
β : Type v
inst✝ : Group α
a b : α
n : ℕ
⊢ Equiv.mulRight a ^ n = Equiv.mulRight (a ^ n)
state_after: case H
α : Type u
β : Type v
inst✝ : Group α
a b : α
n : ℕ
x✝ : α
⊢ (Equiv.mulRight a ^ n) x✝ = (Equiv.mulRight (a ^ n)) x✝

tactic: simp [Perm.coe_pow]
state_before: case H
α : Type u
β : Type v
inst✝ : Group α
a b : α
n : ℕ
x✝ : α
⊢ (Equiv.mulRight a ^ n) x✝ = (Equiv.mulRight (a ^ n)) x✝
state_after: no goals
Theorem: Cardinal.bsup_lt_ord_lift_of_isRegular
File: Mathlib/SetTheory/Cardinal/Cofinality.lean

tactic: rwa [hc.cof_eq]
state_before: α : Type u_1
r : α → α → Prop
o : Ordinal.{u}
f : (a : Ordinal.{u}) → a < o → Ordinal.{max u v}
c : Cardinal.{max u v}
hc : c.IsRegular
hι : lift.{v, u} o.card < c
⊢ lift.{v, u} o.card < c.ord.cof
state_after: no goals
Theorem: Fin.succAbove_eq_last_iff
File: Mathlib/Data/Fin/Basic.lean

tactic: simp [← succAbove_ne_last_last ha, succAbove_right_inj]
state_before: n m : ℕ
p : Fin (n + 1)
i j : Fin n
a : Fin (n + 2)
b : Fin (n + 1)
ha : a ≠ last (n + 1)
⊢ a.succAbove b = last (n + 1) ↔ b = last n
state_after: no goals