1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: DirichletCharacter.Even.eval_neg
File: Mathlib/NumberTheory/DirichletCharacter/Basic.lean

tactic: rw [Even] at hψ
state_before: R : Type u_1
inst✝¹ : CommMonoidWithZero R
n : ℕ
χ : DirichletCharacter R n
S : Type
inst✝ : CommRing S
m : ℕ
ψ : DirichletCharacter S m
x : ZMod m
hψ : ψ.Even
⊢ ψ (-x) = ψ x
state_after: R : Type u_1
inst✝¹ : CommMonoidWithZero R
n : ℕ
χ : DirichletCharacter R n
S : Type
inst✝ : CommRing S
m : ℕ
ψ : DirichletCharacter S m
x : ZMod m
hψ : ψ (-1) = 1
⊢ ψ (-x) = ψ x

tactic: rw [← neg_one_mul, map_mul]
state_before: R : Type u_1
inst✝¹ : CommMonoidWithZero R
n : ℕ
χ : DirichletCharacter R n
S : Type
inst✝ : CommRing S
m : ℕ
ψ : DirichletCharacter S m
x : ZMod m
hψ : ψ (-1) = 1
⊢ ψ (-x) = ψ x
state_after: R : Type u_1
inst✝¹ : CommMonoidWithZero R
n : ℕ
χ : DirichletCharacter R n
S : Type
inst✝ : CommRing S
m : ℕ
ψ : DirichletCharacter S m
x : ZMod m
hψ : ψ (-1) = 1
⊢ ψ (-1) * ψ x = ψ x

tactic: simp [hψ]
state_before: R : Type u_1
inst✝¹ : CommMonoidWithZero R
n : ℕ
χ : DirichletCharacter R n
S : Type
inst✝ : CommRing S
m : ℕ
ψ : DirichletCharacter S m
x : ZMod m
hψ : ψ (-1) = 1
⊢ ψ (-1) * ψ x = ψ x
state_after: no goals
Theorem: PFunctor.Approx.agree_trival
File: Mathlib/Data/PFunctor/Univariate/M.lean

tactic: constructor
state_before: F : PFunctor.{u}
x : CofixA F 0
y : CofixA F 1
⊢ Agree x y
state_after: no goals
Theorem: Finset.nonempty_Iio
File: Mathlib/Order/Interval/Finset/Basic.lean

tactic: simp [Finset.Nonempty]
state_before: ι : Type u_1
α : Type u_2
inst✝² : Preorder α
inst✝¹ : LocallyFiniteOrder α
a a₁ a₂ b b₁ b₂ c x : α
inst✝ : LocallyFiniteOrderBot α
⊢ (Iio a).Nonempty ↔ ¬IsMin a
state_after: no goals
Theorem: MonoidHom.exponent_dvd
File: Mathlib/GroupTheory/Exponent.lean

tactic: refine Monoid.exponent_dvd_of_forall_pow_eq_one fun m₂ ↦ ?_
state_before: G : Type u
F : Type u_1
M₁ : Type u_2
M₂ : Type u_3
inst✝³ : Monoid M₁
inst✝² : Monoid M₂
inst✝¹ : FunLike F M₁ M₂
inst✝ : MonoidHomClass F M₁ M₂
f : F
hf : Function.Surjective ⇑f
⊢ exponent M₂ ∣ exponent M₁
state_after: G : Type u
F : Type u_1
M₁ : Type u_2
M₂ : Type u_3
inst✝³ : Monoid M₁
inst✝² : Monoid M₂
inst✝¹ : FunLike F M₁ M₂
inst✝ : MonoidHomClass F M₁ M₂
f : F
hf : Function.Surjective ⇑f
m₂ : M₂
⊢ m₂ ^ exponent M₁ = 1

tactic: obtain ⟨m₁, rfl⟩ := hf m₂
state_before: G : Type u
F : Type u_1
M₁ : Type u_2
M₂ : Type u_3
inst✝³ : Monoid M₁
inst✝² : Monoid M₂
inst✝¹ : FunLike F M₁ M₂
inst✝ : MonoidHomClass F M₁ M₂
f : F
hf : Function.Surjective ⇑f
m₂ : M₂
⊢ m₂ ^ exponent M₁ = 1
state_after: case intro
G : Type u
F : Type u_1
M₁ : Type u_2
M₂ : Type u_3
inst✝³ : Monoid M₁
inst✝² : Monoid M₂
inst✝¹ : FunLike F M₁ M₂
inst✝ : MonoidHomClass F M₁ M₂
f : F
hf : Function.Surjective ⇑f
m₁ : M₁
⊢ f m₁ ^ exponent M₁ = 1

tactic: rw [← map_pow, pow_exponent_eq_one, map_one]
state_before: case intro
G : Type u
F : Type u_1
M₁ : Type u_2
M₂ : Type u_3
inst✝³ : Monoid M₁
inst✝² : Monoid M₂
inst✝¹ : FunLike F M₁ M₂
inst✝ : MonoidHomClass F M₁ M₂
f : F
hf : Function.Surjective ⇑f
m₁ : M₁
⊢ f m₁ ^ exponent M₁ = 1
state_after: no goals
Theorem: card_le_of_surjective'
File: Mathlib/LinearAlgebra/InvariantBasisNumber.lean

tactic: let P := Finsupp.linearEquivFunOnFinite R R β
state_before: R : Type u
inst✝³ : Semiring R
inst✝² : RankCondition R
α : Type u_1
β : Type u_2
inst✝¹ : Fintype α
inst✝ : Fintype β
f : (α →₀ R) →ₗ[R] β →₀ R
i : Surjective ⇑f
⊢ Fintype.card β ≤ Fintype.card α
state_after: R : Type u
inst✝³ : Semiring R
inst✝² : RankCondition R
α : Type u_1
β : Type u_2
inst✝¹ : Fintype α
inst✝ : Fintype β
f : (α →₀ R) →ₗ[R] β →₀ R
i : Surjective ⇑f
P : (β →₀ R) ≃ₗ[R] β → R := Finsupp.linearEquivFunOnFinite R R β
⊢ Fintype.card β ≤ Fintype.card α

tactic: let Q := (Finsupp.linearEquivFunOnFinite R R α).symm
state_before: R : Type u
inst✝³ : Semiring R
inst✝² : RankCondition R
α : Type u_1
β : Type u_2
inst✝¹ : Fintype α
inst✝ : Fintype β
f : (α →₀ R) →ₗ[R] β →₀ R
i : Surjective ⇑f
P : (β →₀ R) ≃ₗ[R] β → R := Finsupp.linearEquivFunOnFinite R R β
⊢ Fintype.card β ≤ Fintype.card α
state_after: R : Type u
inst✝³ : Semiring R
inst✝² : RankCondition R
α : Type u_1
β : Type u_2
inst✝¹ : Fintype α
inst✝ : Fintype β
f : (α →₀ R) →ₗ[R] β →₀ R
i : Surjective ⇑f
P : (β →₀ R) ≃ₗ[R] β → R := Finsupp.linearEquivFunOnFinite R R β
Q : (α → R) ≃ₗ[R] α →₀ R := (Finsupp.linearEquivFunOnFinite R R α).symm
⊢ Fintype.card β ≤ Fintype.card α

tactic: exact
  card_le_of_surjective R ((P.toLinearMap.comp f).comp Q.toLinearMap)
    ((P.surjective.comp i).comp Q.surjective)
state_before: R : Type u
inst✝³ : Semiring R
inst✝² : RankCondition R
α : Type u_1
β : Type u_2
inst✝¹ : Fintype α
inst✝ : Fintype β
f : (α →₀ R) →ₗ[R] β →₀ R
i : Surjective ⇑f
P : (β →₀ R) ≃ₗ[R] β → R := Finsupp.linearEquivFunOnFinite R R β
Q : (α → R) ≃ₗ[R] α →₀ R := (Finsupp.linearEquivFunOnFinite R R α).symm
⊢ Fintype.card β ≤ Fintype.card α
state_after: no goals
Theorem: AddCommGroup.neg_modEq_neg
File: Mathlib/Algebra/ModEq.lean

tactic: simp [ModEq, neg_add_eq_sub]
state_before: α : Type u_1
inst✝ : AddCommGroup α
p a a₁ a₂ b b₁ b₂ c : α
n : ℕ
z : ℤ
⊢ -b ≡ -a [PMOD p] ↔ a ≡ b [PMOD p]
state_after: no goals
Theorem: Seminorm.neg_mem_ball_zero
File: Mathlib/Analysis/Seminorm.lean

tactic: simp only [mem_ball_zero, map_neg_eq_map]
state_before: R : Type u_1
R' : Type u_2
𝕜 : Type u_3
𝕜₂ : Type u_4
𝕜₃ : Type u_5
𝕝 : Type u_6
E : Type u_7
E₂ : Type u_8
E₃ : Type u_9
F : Type u_10
G : Type u_11
ι : Type u_12
inst✝⁶ : SeminormedRing 𝕜
inst✝⁵ : AddCommGroup E
inst✝⁴ : Module 𝕜 E
inst✝³ : SeminormedRing 𝕜₂
inst✝² : AddCommGroup E₂
inst✝¹ : Module 𝕜₂ E₂
σ₁₂ : 𝕜 →+* 𝕜₂
inst✝ : RingHomIsometric σ₁₂
p : Seminorm 𝕜 E
r : ℝ
x : E
⊢ -x ∈ p.ball 0 r ↔ x ∈ p.ball 0 r
state_after: no goals
Theorem: FractionalIdeal.count_coe_nonneg
File: Mathlib/RingTheory/DedekindDomain/Factorization.lean

tactic: by_cases hJ : J = 0
state_before: R : Type u_1
inst✝⁴ : CommRing R
K : Type u_2
inst✝³ : Field K
inst✝² : Algebra R K
inst✝¹ : IsFractionRing R K
inst✝ : IsDedekindDomain R
v : HeightOneSpectrum R
J : Ideal R
⊢ 0 ≤ count K v ↑J
state_after: case pos
R : Type u_1
inst✝⁴ : CommRing R
K : Type u_2
inst✝³ : Field K
inst✝² : Algebra R K
inst✝¹ : IsFractionRing R K
inst✝ : IsDedekindDomain R
v : HeightOneSpectrum R
J : Ideal R
hJ : J = 0
⊢ 0 ≤ count K v ↑J

case neg
R : Type u_1
inst✝⁴ : CommRing R
K : Type u_2
inst✝³ : Field K
inst✝² : Algebra R K
inst✝¹ : IsFractionRing R K
inst✝ : IsDedekindDomain R
v : HeightOneSpectrum R
J : Ideal R
hJ : ¬J = 0
⊢ 0 ≤ count K v ↑J

tactic: simp only [hJ, Submodule.zero_eq_bot, coeIdeal_bot, count_zero, le_refl]
state_before: case pos
R : Type u_1
inst✝⁴ : CommRing R
K : Type u_2
inst✝³ : Field K
inst✝² : Algebra R K
inst✝¹ : IsFractionRing R K
inst✝ : IsDedekindDomain R
v : HeightOneSpectrum R
J : Ideal R
hJ : J = 0
⊢ 0 ≤ count K v ↑J
state_after: no goals

tactic: simp only [count_coe K v hJ, Nat.cast_nonneg]
state_before: case neg
R : Type u_1
inst✝⁴ : CommRing R
K : Type u_2
inst✝³ : Field K
inst✝² : Algebra R K
inst✝¹ : IsFractionRing R K
inst✝ : IsDedekindDomain R
v : HeightOneSpectrum R
J : Ideal R
hJ : ¬J = 0
⊢ 0 ≤ count K v ↑J
state_after: no goals
Theorem: intervalIntegral.integral_comp_mul_left
File: Mathlib/MeasureTheory/Integral/IntervalIntegral.lean

tactic: simpa only [mul_comm c] using integral_comp_mul_right f hc
state_before: ι : Type u_1
𝕜 : Type u_2
E : Type u_3
F : Type u_4
A : Type u_5
inst✝² : NormedAddCommGroup E
inst✝¹ : CompleteSpace E
inst✝ : NormedSpace ℝ E
a b c d : ℝ
f : ℝ → E
hc : c ≠ 0
⊢ ∫ (x : ℝ) in a..b, f (c * x) = c⁻¹ • ∫ (x : ℝ) in c * a..c * b, f x
state_after: no goals
Theorem: Nat.filter_dvd_eq_divisors
File: Mathlib/NumberTheory/Divisors.lean

tactic: ext
state_before: n : ℕ
h : n ≠ 0
⊢ filter (fun x => x ∣ n) (range n.succ) = n.divisors
state_after: case a
n : ℕ
h : n ≠ 0
a✝ : ℕ
⊢ a✝ ∈ filter (fun x => x ∣ n) (range n.succ) ↔ a✝ ∈ n.divisors

tactic: simp only [divisors, mem_filter, mem_range, mem_Ico, and_congr_left_iff, iff_and_self]
state_before: case a
n : ℕ
h : n ≠ 0
a✝ : ℕ
⊢ a✝ ∈ filter (fun x => x ∣ n) (range n.succ) ↔ a✝ ∈ n.divisors
state_after: case a
n : ℕ
h : n ≠ 0
a✝ : ℕ
⊢ a✝ ∣ n → a✝ < n.succ → 1 ≤ a✝

tactic: exact fun ha _ => succ_le_iff.mpr (pos_of_dvd_of_pos ha h.bot_lt)
state_before: case a
n : ℕ
h : n ≠ 0
a✝ : ℕ
⊢ a✝ ∣ n → a✝ < n.succ → 1 ≤ a✝
state_after: no goals
Theorem: integral_gaussian
File: Mathlib/Analysis/SpecialFunctions/Gaussian/GaussianIntegral.lean

tactic: rcases le_or_lt b 0 with (hb | hb)
state_before: b : ℝ
⊢ ∫ (x : ℝ), rexp (-b * x ^ 2) = √(π / b)
state_after: case inl
b : ℝ
hb : b ≤ 0
⊢ ∫ (x : ℝ), rexp (-b * x ^ 2) = √(π / b)

case inr
b : ℝ
hb : 0 < b
⊢ ∫ (x : ℝ), rexp (-b * x ^ 2) = √(π / b)

tactic: refine (sq_eq_sq (by positivity) (by positivity)).1 ?_
state_before: case inr
b : ℝ
hb : 0 < b
⊢ ∫ (x : ℝ), rexp (-b * x ^ 2) = √(π / b)
state_after: case inr
b : ℝ
hb : 0 < b
⊢ (∫ (x : ℝ), rexp (-b * x ^ 2)) ^ 2 = √(π / b) ^ 2

tactic: rw [← ofReal_inj, ofReal_pow, ← coe_algebraMap, RCLike.algebraMap_eq_ofReal, ← integral_ofReal,
  sq_sqrt (div_pos pi_pos hb).le, ← RCLike.algebraMap_eq_ofReal, coe_algebraMap, ofReal_div]
state_before: case inr
b : ℝ
hb : 0 < b
⊢ (∫ (x : ℝ), rexp (-b * x ^ 2)) ^ 2 = √(π / b) ^ 2
state_after: case inr
b : ℝ
hb : 0 < b
⊢ (∫ (x : ℝ), ↑(rexp (-b * x ^ 2))) ^ 2 = ↑π / ↑b

tactic: convert integral_gaussian_sq_complex (by rwa [ofReal_re] : 0 < (b : ℂ).re) with _ x
state_before: case inr
b : ℝ
hb : 0 < b
⊢ (∫ (x : ℝ), ↑(rexp (-b * x ^ 2))) ^ 2 = ↑π / ↑b
state_after: case h.e'_2.h.e'_5.h.e'_7.h
b : ℝ
hb : 0 < b
x : ℝ
⊢ ↑(rexp (-b * x ^ 2)) = cexp (-↑b * ↑x ^ 2)

tactic: rw [ofReal_exp, ofReal_mul, ofReal_pow, ofReal_neg]
state_before: case h.e'_2.h.e'_5.h.e'_7.h
b : ℝ
hb : 0 < b
x : ℝ
⊢ ↑(rexp (-b * x ^ 2)) = cexp (-↑b * ↑x ^ 2)
state_after: no goals

tactic: rw [integral_undef, sqrt_eq_zero_of_nonpos]
state_before: case inl
b : ℝ
hb : b ≤ 0
⊢ ∫ (x : ℝ), rexp (-b * x ^ 2) = √(π / b)
state_after: case inl
b : ℝ
hb : b ≤ 0
⊢ π / b ≤ 0

case inl
b : ℝ
hb : b ≤ 0
⊢ ¬Integrable (fun x => rexp (-b * x ^ 2)) volume

tactic: exact div_nonpos_of_nonneg_of_nonpos pi_pos.le hb
state_before: case inl
b : ℝ
hb : b ≤ 0
⊢ π / b ≤ 0
state_after: no goals

tactic: simpa only [not_lt, integrable_exp_neg_mul_sq_iff] using hb
state_before: case inl
b : ℝ
hb : b ≤ 0
⊢ ¬Integrable (fun x => rexp (-b * x ^ 2)) volume
state_after: no goals

tactic: positivity
state_before: b : ℝ
hb : 0 < b
⊢ 0 ≤ ∫ (x : ℝ), rexp (-b * x ^ 2)
state_after: no goals

tactic: positivity
state_before: b : ℝ
hb : 0 < b
⊢ 0 ≤ √(π / b)
state_after: no goals

tactic: rwa [ofReal_re]
state_before: b : ℝ
hb : 0 < b
⊢ 0 < (↑b).re
state_after: no goals
Theorem: MonovaryOn.sum_smul_comp_perm_lt_sum_smul_iff
File: Mathlib/Algebra/Order/Rearrangement.lean

tactic: simp [← hfg.sum_smul_comp_perm_eq_sum_smul_iff hσ, lt_iff_le_and_ne,
  hfg.sum_smul_comp_perm_le_sum_smul hσ]
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | σ x ≠ x} ⊆ ↑s
⊢ ∑ i ∈ s, f i • g (σ i) < ∑ i ∈ s, f i • g i ↔ ¬MonovaryOn f (g ∘ ⇑σ) ↑s
state_after: no goals
Theorem: Asymptotics.superpolynomialDecay_mul_param_pow_iff
File: Mathlib/Analysis/Asymptotics/SuperpolynomialDecay.lean

tactic: simpa [mul_comm f] using superpolynomialDecay_param_pow_mul_iff f hk n
state_before: α : Type u_1
β : Type u_2
l : Filter α
k f g g' : α → β
inst✝² : TopologicalSpace β
inst✝¹ : LinearOrderedField β
inst✝ : OrderTopology β
hk : Tendsto k l atTop
n : ℕ
⊢ SuperpolynomialDecay l k (f * k ^ n) ↔ SuperpolynomialDecay l k f
state_after: no goals
Theorem: Equiv.symm_trans_swap_trans
File: Mathlib/Logic/Equiv/Basic.lean

tactic: have : ∀ a, e.symm x = a ↔ x = e a := fun a => by
  rw [@eq_comm _ (e.symm x)]
  constructor <;> intros <;> simp_all
state_before: α : Sort u_2
inst✝¹ : DecidableEq α
β : Sort u_1
inst✝ : DecidableEq β
a b : α
e : α ≃ β
x : β
⊢ ((e.symm.trans (swap a b)).trans e) x = (swap (e a) (e b)) x
state_after: α : Sort u_2
inst✝¹ : DecidableEq α
β : Sort u_1
inst✝ : DecidableEq β
a b : α
e : α ≃ β
x : β
this : ∀ (a : α), e.symm x = a ↔ x = e a
⊢ ((e.symm.trans (swap a b)).trans e) x = (swap (e a) (e b)) x

tactic: simp only [trans_apply, swap_apply_def, this]
state_before: α : Sort u_2
inst✝¹ : DecidableEq α
β : Sort u_1
inst✝ : DecidableEq β
a b : α
e : α ≃ β
x : β
this : ∀ (a : α), e.symm x = a ↔ x = e a
⊢ ((e.symm.trans (swap a b)).trans e) x = (swap (e a) (e b)) x
state_after: α : Sort u_2
inst✝¹ : DecidableEq α
β : Sort u_1
inst✝ : DecidableEq β
a b : α
e : α ≃ β
x : β
this : ∀ (a : α), e.symm x = a ↔ x = e a
⊢ e (if x = e a then b else if x = e b then a else e.symm x) = if x = e a then e b else if x = e b then e a else x

tactic: split_ifs <;> simp
state_before: α : Sort u_2
inst✝¹ : DecidableEq α
β : Sort u_1
inst✝ : DecidableEq β
a b : α
e : α ≃ β
x : β
this : ∀ (a : α), e.symm x = a ↔ x = e a
⊢ e (if x = e a then b else if x = e b then a else e.symm x) = if x = e a then e b else if x = e b then e a else x
state_after: no goals

tactic: rw [@eq_comm _ (e.symm x)]
state_before: α : Sort u_2
inst✝¹ : DecidableEq α
β : Sort u_1
inst✝ : DecidableEq β
a✝ b : α
e : α ≃ β
x : β
a : α
⊢ e.symm x = a ↔ x = e a
state_after: α : Sort u_2
inst✝¹ : DecidableEq α
β : Sort u_1
inst✝ : DecidableEq β
a✝ b : α
e : α ≃ β
x : β
a : α
⊢ a = e.symm x ↔ x = e a

tactic: constructor <;> intros <;> simp_all
state_before: α : Sort u_2
inst✝¹ : DecidableEq α
β : Sort u_1
inst✝ : DecidableEq β
a✝ b : α
e : α ≃ β
x : β
a : α
⊢ a = e.symm x ↔ x = e a
state_after: no goals
Theorem: WeierstrassCurve.Affine.CoordinateRing.smul_basis_mul_C
File: Mathlib/AlgebraicGeometry/EllipticCurve/Group.lean

tactic: simp only [smul, _root_.map_mul]
state_before: R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : CommRing S
W : Affine R
f : R →+* S
y p q : R[X]
⊢ (p • 1 + q • (mk W) Y) * (mk W) (C y) = (p * y) • 1 + (q * y) • (mk W) Y
state_after: R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : CommRing S
W : Affine R
f : R →+* S
y p q : R[X]
⊢ ((mk W) (C p) * 1 + (mk W) (C q) * (mk W) Y) * (mk W) (C y) =
    (mk W) (C p) * (mk W) (C y) * 1 + (mk W) (C q) * (mk W) (C y) * (mk W) Y

tactic: ring1
state_before: R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : CommRing S
W : Affine R
f : R →+* S
y p q : R[X]
⊢ ((mk W) (C p) * 1 + (mk W) (C q) * (mk W) Y) * (mk W) (C y) =
    (mk W) (C p) * (mk W) (C y) * 1 + (mk W) (C q) * (mk W) (C y) * (mk W) Y
state_after: no goals
Theorem: SimpleGraph.IsUniform.pos
File: Mathlib/Combinatorics/SimpleGraph/Regularity/Uniform.lean

tactic: simpa using mul_nonpos_of_nonneg_of_nonpos (Nat.cast_nonneg _) hε
state_before: α : Type u_1
𝕜 : Type u_2
inst✝¹ : LinearOrderedField 𝕜
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : 𝕜
s t : Finset α
a b : α
hG : G.IsUniform ε s t
hε : ε ≤ 0
⊢ ↑s.card * ε ≤ ↑∅.card
state_after: no goals

tactic: simpa using mul_nonpos_of_nonneg_of_nonpos (Nat.cast_nonneg _) hε
state_before: α : Type u_1
𝕜 : Type u_2
inst✝¹ : LinearOrderedField 𝕜
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε : 𝕜
s t : Finset α
a b : α
hG : G.IsUniform ε s t
hε : ε ≤ 0
⊢ ↑t.card * ε ≤ ↑∅.card
state_after: no goals
Theorem: Finite.bddBelow_range
File: Mathlib/Data/Fintype/Order.lean

tactic: obtain ⟨M, hM⟩ := Finite.exists_ge f
state_before: α : Type u_1
r : α → α → Prop
inst✝⁵ : IsTrans α r
β : Type u_2
γ : Type u_3
inst✝⁴ : Nonempty γ
f✝ : γ → α
inst✝³ : Finite β
D : Directed r f✝
inst✝² : Nonempty α
inst✝¹ : Preorder α
inst✝ : IsDirected α fun x x_1 => x ≥ x_1
f : β → α
⊢ BddBelow (Set.range f)
state_after: case intro
α : Type u_1
r : α → α → Prop
inst✝⁵ : IsTrans α r
β : Type u_2
γ : Type u_3
inst✝⁴ : Nonempty γ
f✝ : γ → α
inst✝³ : Finite β
D : Directed r f✝
inst✝² : Nonempty α
inst✝¹ : Preorder α
inst✝ : IsDirected α fun x x_1 => x ≥ x_1
f : β → α
M : α
hM : ∀ (i : β), M ≤ f i
⊢ BddBelow (Set.range f)

tactic: refine ⟨M, fun a ha => ?_⟩
state_before: case intro
α : Type u_1
r : α → α → Prop
inst✝⁵ : IsTrans α r
β : Type u_2
γ : Type u_3
inst✝⁴ : Nonempty γ
f✝ : γ → α
inst✝³ : Finite β
D : Directed r f✝
inst✝² : Nonempty α
inst✝¹ : Preorder α
inst✝ : IsDirected α fun x x_1 => x ≥ x_1
f : β → α
M : α
hM : ∀ (i : β), M ≤ f i
⊢ BddBelow (Set.range f)
state_after: case intro
α : Type u_1
r : α → α → Prop
inst✝⁵ : IsTrans α r
β : Type u_2
γ : Type u_3
inst✝⁴ : Nonempty γ
f✝ : γ → α
inst✝³ : Finite β
D : Directed r f✝
inst✝² : Nonempty α
inst✝¹ : Preorder α
inst✝ : IsDirected α fun x x_1 => x ≥ x_1
f : β → α
M : α
hM : ∀ (i : β), M ≤ f i
a : α
ha : a ∈ Set.range f
⊢ M ≤ a

tactic: obtain ⟨b, rfl⟩ := ha
state_before: case intro
α : Type u_1
r : α → α → Prop
inst✝⁵ : IsTrans α r
β : Type u_2
γ : Type u_3
inst✝⁴ : Nonempty γ
f✝ : γ → α
inst✝³ : Finite β
D : Directed r f✝
inst✝² : Nonempty α
inst✝¹ : Preorder α
inst✝ : IsDirected α fun x x_1 => x ≥ x_1
f : β → α
M : α
hM : ∀ (i : β), M ≤ f i
a : α
ha : a ∈ Set.range f
⊢ M ≤ a
state_after: case intro.intro
α : Type u_1
r : α → α → Prop
inst✝⁵ : IsTrans α r
β : Type u_2
γ : Type u_3
inst✝⁴ : Nonempty γ
f✝ : γ → α
inst✝³ : Finite β
D : Directed r f✝
inst✝² : Nonempty α
inst✝¹ : Preorder α
inst✝ : IsDirected α fun x x_1 => x ≥ x_1
f : β → α
M : α
hM : ∀ (i : β), M ≤ f i
b : β
⊢ M ≤ f b

tactic: exact hM b
state_before: case intro.intro
α : Type u_1
r : α → α → Prop
inst✝⁵ : IsTrans α r
β : Type u_2
γ : Type u_3
inst✝⁴ : Nonempty γ
f✝ : γ → α
inst✝³ : Finite β
D : Directed r f✝
inst✝² : Nonempty α
inst✝¹ : Preorder α
inst✝ : IsDirected α fun x x_1 => x ≥ x_1
f : β → α
M : α
hM : ∀ (i : β), M ≤ f i
b : β
⊢ M ≤ f b
state_after: no goals
Theorem: List.nodup_cons
File: Mathlib/Data/List/Nodup.lean

tactic: simp only [Nodup, pairwise_cons, forall_mem_ne]
state_before: α : Type u
β : Type v
l✝ l₁ l₂ : List α
r : α → α → Prop
a✝ b a : α
l : List α
⊢ (a :: l).Nodup ↔ a ∉ l ∧ l.Nodup
state_after: no goals
Theorem: CategoryTheory.Limits.limitIsoLimitCurryCompLim_hom_π_π
File: Mathlib/CategoryTheory/Limits/Fubini.lean

tactic: set_option tactic.skipAssignedInstances false in
simp [limitIsoLimitCurryCompLim, Trans.simple, HasLimit.isoOfNatIso, limitUncurryIsoLimitCompLim]
state_before: J K : Type v
inst✝⁵ : SmallCategory J
inst✝⁴ : SmallCategory K
C : Type u
inst✝³ : Category.{v, u} C
F : J ⥤ K ⥤ C
G : J × K ⥤ C
inst✝² : HasLimitsOfShape K C
inst✝¹ : HasLimit G
inst✝ : HasLimit (curry.obj G ⋙ lim)
j : J
k : K
⊢ (limitIsoLimitCurryCompLim G).hom ≫ limit.π (curry.obj G ⋙ lim) j ≫ limit.π ((curry.obj G).obj j) k = limit.π G (j, k)
state_after: no goals

tactic: simp [limitIsoLimitCurryCompLim, Trans.simple, HasLimit.isoOfNatIso, limitUncurryIsoLimitCompLim]
state_before: J K : Type v
inst✝⁵ : SmallCategory J
inst✝⁴ : SmallCategory K
C : Type u
inst✝³ : Category.{v, u} C
F : J ⥤ K ⥤ C
G : J × K ⥤ C
inst✝² : HasLimitsOfShape K C
inst✝¹ : HasLimit G
inst✝ : HasLimit (curry.obj G ⋙ lim)
j : J
k : K
⊢ (limitIsoLimitCurryCompLim G).hom ≫ limit.π (curry.obj G ⋙ lim) j ≫ limit.π ((curry.obj G).obj j) k = limit.π G (j, k)
state_after: no goals
Theorem: CategoryTheory.ShortComplex.cyclesMap'_comp
File: Mathlib/Algebra/Homology/ShortComplex/LeftHomology.lean

tactic: let γ₁ := leftHomologyMapData φ₁ h₁ h₂
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
φ₁ : S₁ ⟶ S₂
φ₂ : S₂ ⟶ S₃
h₁ : S₁.LeftHomologyData
h₂ : S₂.LeftHomologyData
h₃ : S₃.LeftHomologyData
⊢ cyclesMap' (φ₁ ≫ φ₂) h₁ h₃ = cyclesMap' φ₁ h₁ h₂ ≫ cyclesMap' φ₂ h₂ h₃
state_after: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
φ₁ : S₁ ⟶ S₂
φ₂ : S₂ ⟶ S₃
h₁ : S₁.LeftHomologyData
h₂ : S₂.LeftHomologyData
h₃ : S₃.LeftHomologyData
γ₁ : LeftHomologyMapData φ₁ h₁ h₂ := leftHomologyMapData φ₁ h₁ h₂
⊢ cyclesMap' (φ₁ ≫ φ₂) h₁ h₃ = cyclesMap' φ₁ h₁ h₂ ≫ cyclesMap' φ₂ h₂ h₃

tactic: let γ₂ := leftHomologyMapData φ₂ h₂ h₃
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
φ₁ : S₁ ⟶ S₂
φ₂ : S₂ ⟶ S₃
h₁ : S₁.LeftHomologyData
h₂ : S₂.LeftHomologyData
h₃ : S₃.LeftHomologyData
γ₁ : LeftHomologyMapData φ₁ h₁ h₂ := leftHomologyMapData φ₁ h₁ h₂
⊢ cyclesMap' (φ₁ ≫ φ₂) h₁ h₃ = cyclesMap' φ₁ h₁ h₂ ≫ cyclesMap' φ₂ h₂ h₃
state_after: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
φ₁ : S₁ ⟶ S₂
φ₂ : S₂ ⟶ S₃
h₁ : S₁.LeftHomologyData
h₂ : S₂.LeftHomologyData
h₃ : S₃.LeftHomologyData
γ₁ : LeftHomologyMapData φ₁ h₁ h₂ := leftHomologyMapData φ₁ h₁ h₂
γ₂ : LeftHomologyMapData φ₂ h₂ h₃ := leftHomologyMapData φ₂ h₂ h₃
⊢ cyclesMap' (φ₁ ≫ φ₂) h₁ h₃ = cyclesMap' φ₁ h₁ h₂ ≫ cyclesMap' φ₂ h₂ h₃

tactic: rw [γ₁.cyclesMap'_eq, γ₂.cyclesMap'_eq, (γ₁.comp γ₂).cyclesMap'_eq,
  LeftHomologyMapData.comp_φK]
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
φ₁ : S₁ ⟶ S₂
φ₂ : S₂ ⟶ S₃
h₁ : S₁.LeftHomologyData
h₂ : S₂.LeftHomologyData
h₃ : S₃.LeftHomologyData
γ₁ : LeftHomologyMapData φ₁ h₁ h₂ := leftHomologyMapData φ₁ h₁ h₂
γ₂ : LeftHomologyMapData φ₂ h₂ h₃ := leftHomologyMapData φ₂ h₂ h₃
⊢ cyclesMap' (φ₁ ≫ φ₂) h₁ h₃ = cyclesMap' φ₁ h₁ h₂ ≫ cyclesMap' φ₂ h₂ h₃
state_after: no goals
Theorem: Cycle.mem_map
File: Mathlib/Data/List/Cycle.lean

tactic: simp
state_before: α : Type u_1
β : Type u_2
f : α → β
b : β
s : Cycle α
⊢ ∀ (a : List α), b ∈ map f (Quotient.mk'' a) ↔ ∃ a_1 ∈ Quotient.mk'' a, f a_1 = b
state_after: no goals
Theorem: List.tail_append_of_ne_nil
File: Mathlib/Data/List/Basic.lean

tactic: cases l
state_before: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ l l' : List α
h : l ≠ []
⊢ (l ++ l').tail = l.tail ++ l'
state_after: case nil
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ l' : List α
h : [] ≠ []
⊢ ([] ++ l').tail = [].tail ++ l'

case cons
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ l' : List α
head✝ : α
tail✝ : List α
h : head✝ :: tail✝ ≠ []
⊢ (head✝ :: tail✝ ++ l').tail = (head✝ :: tail✝).tail ++ l'

tactic: contradiction
state_before: case nil
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ l' : List α
h : [] ≠ []
⊢ ([] ++ l').tail = [].tail ++ l'
state_after: no goals

tactic: simp
state_before: case cons
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ l' : List α
head✝ : α
tail✝ : List α
h : head✝ :: tail✝ ≠ []
⊢ (head✝ :: tail✝ ++ l').tail = (head✝ :: tail✝).tail ++ l'
state_after: no goals
Theorem: CategoryTheory.Limits.zero_of_epi_comp
File: Mathlib/CategoryTheory/Limits/Shapes/ZeroMorphisms.lean

tactic: rw [← comp_zero, cancel_epi] at h
state_before: C : Type u
inst✝³ : Category.{v, u} C
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : HasZeroMorphisms C
X Y Z : C
f : X ⟶ Y
g : Y ⟶ Z
inst✝ : Epi f
h : f ≫ g = 0
⊢ g = 0
state_after: C : Type u
inst✝³ : Category.{v, u} C
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : HasZeroMorphisms C
X Y Z : C
f : X ⟶ Y
g : Y ⟶ Z
inst✝ : Epi f
h✝ : f ≫ g = 0
h : g = 0
⊢ g = 0

tactic: exact h
state_before: C : Type u
inst✝³ : Category.{v, u} C
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : HasZeroMorphisms C
X Y Z : C
f : X ⟶ Y
g : Y ⟶ Z
inst✝ : Epi f
h✝ : f ≫ g = 0
h : g = 0
⊢ g = 0
state_after: no goals
Theorem: affineSegment_same
File: Mathlib/Analysis/Convex/Between.lean

tactic: simp_rw [affineSegment, lineMap_same, AffineMap.coe_const, Function.const,
  (Set.nonempty_Icc.mpr zero_le_one).image_const]
state_before: R : Type u_1
V : Type u_2
V' : Type u_3
P : Type u_4
P' : Type u_5
inst✝⁶ : OrderedRing R
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module R V
inst✝³ : AddTorsor V P
inst✝² : AddCommGroup V'
inst✝¹ : Module R V'
inst✝ : AddTorsor V' P'
x : P
⊢ affineSegment R x x = {x}
state_after: no goals