tasksource/leandojo huggingface dataset:
Theorem: Ordnode.Valid'.node4L_lemma₃
File: Mathlib/Data/Ordmap/Ordset.lean

tactic: linarith
state_before: α : Type ?u.284064
inst✝ : Preorder α
b c d : ℕ
mr₁ : 2 * d ≤ b + c + 1
mm₁ : b ≤ 3 * c
⊢ d ≤ 3 * c
Theorem: Associates.mem_factors'_of_dvd
File: Mathlib/RingTheory/UniqueFactorizationDomain.lean

tactic: obtain ⟨q, hq, hpq⟩ := exists_mem_factors_of_dvd ha0 hp hd
state_before: α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
dec_irr : (p : Associates α) → Decidable (Irreducible p)
inst✝ : UniqueFactorizationMonoid α
dec : DecidableEq α
dec' : DecidableEq (Associates α)
a p : α
ha0 : a ≠ 0
hp : Irreducible p
hd : p ∣ a
⊢ { val := Associates.mk p, property := (_ : Irreducible (Associates.mk p)) } ∈ factors' a

tactic: apply Multiset.mem_pmap.mpr
state_before: case intro.intro
α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
dec_irr : (p : Associates α) → Decidable (Irreducible p)
inst✝ : UniqueFactorizationMonoid α
dec : DecidableEq α
dec' : DecidableEq (Associates α)
a p : α
ha0 : a ≠ 0
hp : Irreducible p
hd : p ∣ a
q : α
hq : q ∈ UniqueFactorizationMonoid.factors a
hpq : p ~ᵤ q
⊢ { val := Associates.mk p, property := (_ : Irreducible (Associates.mk p)) } ∈ factors' a

tactic: use q
state_before: case intro.intro
α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
dec_irr : (p : Associates α) → Decidable (Irreducible p)
inst✝ : UniqueFactorizationMonoid α
dec : DecidableEq α
dec' : DecidableEq (Associates α)
a p : α
ha0 : a ≠ 0
hp : Irreducible p
hd : p ∣ a
q : α
hq : q ∈ UniqueFactorizationMonoid.factors a
hpq : p ~ᵤ q
⊢ ∃ a_1 h,
    { val := Associates.mk a_1, property := (_ : Irreducible (Associates.mk a_1)) } =
      { val := Associates.mk p, property := (_ : Irreducible (Associates.mk p)) }

tactic: use hq
state_before: case intro.intro
α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
dec_irr : (p : Associates α) → Decidable (Irreducible p)
inst✝ : UniqueFactorizationMonoid α
dec : DecidableEq α
dec' : DecidableEq (Associates α)
a p : α
ha0 : a ≠ 0
hp : Irreducible p
hd : p ∣ a
q : α
hq : q ∈ UniqueFactorizationMonoid.factors a
hpq : p ~ᵤ q
⊢ ∃ h,
    { val := Associates.mk q, property := (_ : Irreducible (Associates.mk q)) } =
      { val := Associates.mk p, property := (_ : Irreducible (Associates.mk p)) }

tactic: exact Subtype.eq (Eq.symm (mk_eq_mk_iff_associated.mpr hpq))
state_before: case intro.intro
α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
dec_irr : (p : Associates α) → Decidable (Irreducible p)
inst✝ : UniqueFactorizationMonoid α
dec : DecidableEq α
dec' : DecidableEq (Associates α)
a p : α
ha0 : a ≠ 0
hp : Irreducible p
hd : p ∣ a
q : α
hq : q ∈ UniqueFactorizationMonoid.factors a
hpq : p ~ᵤ q
⊢ { val := Associates.mk q, property := (_ : Irreducible (Associates.mk q)) } =
    { val := Associates.mk p, property := (_ : Irreducible (Associates.mk p)) }
Theorem: zpow_bit1₀
File: Mathlib/Algebra/GroupWithZero/Power.lean

tactic: rw [← zpow_bit0, bit1, zpow_add', zpow_one]
state_before: G₀ : Type u_1
inst✝ : GroupWithZero G₀
a : G₀
n : ℤ
⊢ a ^ bit1 n = a ^ n * a ^ n * a

tactic: right
state_before: G₀ : Type u_1
inst✝ : GroupWithZero G₀
a : G₀
n : ℤ
⊢ a ≠ 0 ∨ bit0 n + 1 ≠ 0 ∨ bit0 n = 0 ∧ 1 = 0

tactic: left
state_before: case h
G₀ : Type u_1
inst✝ : GroupWithZero G₀
a : G₀
n : ℤ
⊢ bit0 n + 1 ≠ 0 ∨ bit0 n = 0 ∧ 1 = 0

tactic: apply bit1_ne_zero
state_before: case h.h
G₀ : Type u_1
inst✝ : GroupWithZero G₀
a : G₀
n : ℤ
⊢ bit0 n + 1 ≠ 0
Theorem: GaloisConnection.l_limsup_le
File: Mathlib/Order/LiminfLimsup.lean

tactic: refine' le_limsSup_of_le hlv fun c hc => _
state_before: α : Type u_3
β : Type u_1
γ : Type u_2
ι : Type ?u.205644
inst✝¹ : ConditionallyCompleteLattice β
inst✝ : ConditionallyCompleteLattice γ
f : Filter α
v : α → β
l : β → γ
u : γ → β
gc : GaloisConnection l u
hlv : autoParam (IsBoundedUnder (fun x x_1 => x ≤ x_1) f fun x => l (v x)) _auto✝
hv_co : autoParam (IsCoboundedUnder (fun x x_1 => x ≤ x_1) f v) _auto✝
⊢ l (limsup v f) ≤ limsup (fun x => l (v x)) f

tactic: rw [Filter.eventually_map] at hc
state_before: α : Type u_3
β : Type u_1
γ : Type u_2
ι : Type ?u.205644
inst✝¹ : ConditionallyCompleteLattice β
inst✝ : ConditionallyCompleteLattice γ
f : Filter α
v : α → β
l : β → γ
u : γ → β
gc : GaloisConnection l u
hlv : autoParam (IsBoundedUnder (fun x x_1 => x ≤ x_1) f fun x => l (v x)) _auto✝
hv_co : autoParam (IsCoboundedUnder (fun x x_1 => x ≤ x_1) f v) _auto✝
c : γ
hc : ∀ᶠ (n : γ) in map (fun x => l (v x)) f, n ≤ c
⊢ l (limsup v f) ≤ c

tactic: simp_rw [gc _ _] at hc⊢
state_before: α : Type u_3
β : Type u_1
γ : Type u_2
ι : Type ?u.205644
inst✝¹ : ConditionallyCompleteLattice β
inst✝ : ConditionallyCompleteLattice γ
f : Filter α
v : α → β
l : β → γ
u : γ → β
gc : GaloisConnection l u
hlv : autoParam (IsBoundedUnder (fun x x_1 => x ≤ x_1) f fun x => l (v x)) _auto✝
hv_co : autoParam (IsCoboundedUnder (fun x x_1 => x ≤ x_1) f v) _auto✝
c : γ
hc : ∀ᶠ (a : α) in f, l (v a) ≤ c
⊢ l (limsup v f) ≤ c

tactic: exact limsSup_le_of_le hv_co hc
state_before: α : Type u_3
β : Type u_1
γ : Type u_2
ι : Type ?u.205644
inst✝¹ : ConditionallyCompleteLattice β
inst✝ : ConditionallyCompleteLattice γ
f : Filter α
v : α → β
l : β → γ
u : γ → β
gc : GaloisConnection l u
hlv : autoParam (IsBoundedUnder (fun x x_1 => x ≤ x_1) f fun x => l (v x)) _auto✝
hv_co : autoParam (IsCoboundedUnder (fun x x_1 => x ≤ x_1) f v) _auto✝
c : γ
hc : ∀ᶠ (a : α) in f, v a ≤ u c
⊢ limsup v f ≤ u c
Theorem: BoxIntegral.Prepartition.forall_biUnionTagged
File: Mathlib/Analysis/BoxIntegral/Partition/Tagged.lean

tactic: simp only [mem_biUnionTagged]
state_before: ι : Type u_1
I J : Box ι
p : (ι → ℝ) → Box ι → Prop
π : Prepartition I
πi : (J : Box ι) → TaggedPrepartition J
⊢ (∀ (J : Box ι), J ∈ biUnionTagged π πi → p (TaggedPrepartition.tag (biUnionTagged π πi) J) J) ↔
    ∀ (J : Box ι), J ∈ π → ∀ (J' : Box ι), J' ∈ πi J → p (TaggedPrepartition.tag (πi J) J') J'

tactic: refine' ⟨fun H J hJ J' hJ' => _, fun H J' ⟨J, hJ, hJ'⟩ => _⟩
state_before: ι : Type u_1
I J : Box ι
p : (ι → ℝ) → Box ι → Prop
π : Prepartition I
πi : (J : Box ι) → TaggedPrepartition J
⊢ (∀ (J : Box ι), (∃ J', J' ∈ π ∧ J ∈ πi J') → p (TaggedPrepartition.tag (biUnionTagged π πi) J) J) ↔
    ∀ (J : Box ι), J ∈ π → ∀ (J' : Box ι), J' ∈ πi J → p (TaggedPrepartition.tag (πi J) J') J'

tactic: rw [← π.tag_biUnionTagged hJ hJ']
state_before: case refine'_1
ι : Type u_1
I J✝ : Box ι
p : (ι → ℝ) → Box ι → Prop
π : Prepartition I
πi : (J : Box ι) → TaggedPrepartition J
H : ∀ (J : Box ι), (∃ J', J' ∈ π ∧ J ∈ πi J') → p (TaggedPrepartition.tag (biUnionTagged π πi) J) J
J : Box ι
hJ : J ∈ π
J' : Box ι
hJ' : J' ∈ πi J
⊢ p (TaggedPrepartition.tag (πi J) J') J'

tactic: exact H J' ⟨J, hJ, hJ'⟩
state_before: case refine'_1
ι : Type u_1
I J✝ : Box ι
p : (ι → ℝ) → Box ι → Prop
π : Prepartition I
πi : (J : Box ι) → TaggedPrepartition J
H : ∀ (J : Box ι), (∃ J', J' ∈ π ∧ J ∈ πi J') → p (TaggedPrepartition.tag (biUnionTagged π πi) J) J
J : Box ι
hJ : J ∈ π
J' : Box ι
hJ' : J' ∈ πi J
⊢ p (TaggedPrepartition.tag (biUnionTagged π πi) J') J'

tactic: rw [π.tag_biUnionTagged hJ hJ']
state_before: case refine'_2
ι : Type u_1
I J✝ : Box ι
p : (ι → ℝ) → Box ι → Prop
π : Prepartition I
πi : (J : Box ι) → TaggedPrepartition J
H : ∀ (J : Box ι), J ∈ π → ∀ (J' : Box ι), J' ∈ πi J → p (TaggedPrepartition.tag (πi J) J') J'
J' : Box ι
x✝ : ∃ J'_1, J'_1 ∈ π ∧ J' ∈ πi J'_1
J : Box ι
hJ : J ∈ π
hJ' : J' ∈ πi J
⊢ p (TaggedPrepartition.tag (biUnionTagged π πi) J') J'

tactic: exact H J hJ J' hJ'
state_before: case refine'_2
ι : Type u_1
I J✝ : Box ι
p : (ι → ℝ) → Box ι → Prop
π : Prepartition I
πi : (J : Box ι) → TaggedPrepartition J
H : ∀ (J : Box ι), J ∈ π → ∀ (J' : Box ι), J' ∈ πi J → p (TaggedPrepartition.tag (πi J) J') J'
J' : Box ι
x✝ : ∃ J'_1, J'_1 ∈ π ∧ J' ∈ πi J'_1
J : Box ι
hJ : J ∈ π
hJ' : J' ∈ πi J
⊢ p (TaggedPrepartition.tag (πi J) J') J'
Theorem: Polynomial.natTrailingDegree_le_of_trailingDegree_le
File: Mathlib/Data/Polynomial/Degree/TrailingDegree.lean

tactic: rw [trailingDegree_eq_natTrailingDegree hp] at H
state_before: R : Type u
S : Type v
a b : R
n✝ m : ℕ
inst✝ : Semiring R
p q r : R[X]
n : ℕ
hp : p ≠ 0
H : ↑n ≤ trailingDegree p
⊢ n ≤ natTrailingDegree p

tactic: exact WithTop.coe_le_coe.mp H
state_before: R : Type u
S : Type v
a b : R
n✝ m : ℕ
inst✝ : Semiring R
p q r : R[X]
n : ℕ
hp : p ≠ 0
H : ↑n ≤ ↑(natTrailingDegree p)
⊢ n ≤ natTrailingDegree p
Theorem: Metric.equicontinuousAt_of_continuity_modulus
File: Mathlib/Topology/MetricSpace/Equicontinuity.lean

tactic: rw [Metric.equicontinuousAt_iff_right]
state_before: α : Type u_3
β : Type u_2
ι✝ : Type ?u.3074
inst✝¹ : PseudoMetricSpace α
ι : Type u_1
inst✝ : TopologicalSpace β
x₀ : β
b : β → ℝ
b_lim : Tendsto b (𝓝 x₀) (𝓝 0)
F : ι → β → α
H : ∀ᶠ (x : β) in 𝓝 x₀, ∀ (i : ι), dist (F i x₀) (F i x) ≤ b x
⊢ EquicontinuousAt F x₀

tactic: intro ε ε0
state_before: α : Type u_3
β : Type u_2
ι✝ : Type ?u.3074
inst✝¹ : PseudoMetricSpace α
ι : Type u_1
inst✝ : TopologicalSpace β
x₀ : β
b : β → ℝ
b_lim : Tendsto b (𝓝 x₀) (𝓝 0)
F : ι → β → α
H : ∀ᶠ (x : β) in 𝓝 x₀, ∀ (i : ι), dist (F i x₀) (F i x) ≤ b x
⊢ ∀ (ε : ℝ), ε > 0 → ∀ᶠ (x : β) in 𝓝 x₀, ∀ (i : ι), dist (F i x₀) (F i x) < ε

tactic: filter_upwards [Filter.mem_map.mp <| b_lim (Iio_mem_nhds ε0), H] using
  fun x hx₁ hx₂ i => (hx₂ i).trans_lt hx₁
state_before: α : Type u_3
β : Type u_2
ι✝ : Type ?u.3074
inst✝¹ : PseudoMetricSpace α
ι : Type u_1
inst✝ : TopologicalSpace β
x₀ : β
b : β → ℝ
b_lim : Tendsto b (𝓝 x₀) (𝓝 0)
F : ι → β → α
H : ∀ᶠ (x : β) in 𝓝 x₀, ∀ (i : ι), dist (F i x₀) (F i x) ≤ b x
ε : ℝ
ε0 : ε > 0
⊢ ∀ᶠ (x : β) in 𝓝 x₀, ∀ (i : ι), dist (F i x₀) (F i x) < ε
Theorem: String.extract_cons_addChar
File: Std/Data/String/Lemmas.lean

tactic: simp [extract, Nat.add_le_add_iff_le_right]
state_before: c : Char
cs : List Char
b e : Pos
⊢ extract { data := c :: cs } (b + c) (e + c) = extract { data := cs } b e

tactic: split <;> [rfl; rw [extract.go₁_cons_addChar]]
state_before: c : Char
cs : List Char
b e : Pos
⊢ (if e.byteIdx ≤ b.byteIdx then "" else { data := extract.go₁ (c :: cs) 0 (b + c) (e + c) }) =
    if b.byteIdx ≥ e.byteIdx then "" else { data := extract.go₁ cs 0 b e }
Theorem: List.filterMap_append
File: Std/Data/List/Lemmas.lean

tactic: induction l <;> simp
state_before: α : Type u_1
β : Type u_2
l l' : List α
f : α → Option β
⊢ filterMap f (l ++ l') = filterMap f l ++ filterMap f l'

tactic: split <;> simp [*]
state_before: case cons
α : Type u_1
β : Type u_2
l' : List α
f : α → Option β
head✝ : α
tail✝ : List α
tail_ih✝ : filterMap f (tail✝ ++ l') = filterMap f tail✝ ++ filterMap f l'
⊢ (match f head✝ with
    | none => filterMap f (tail✝ ++ l')
    | some b => b :: filterMap f (tail✝ ++ l')) =
    (match f head✝ with
      | none => filterMap f tail✝
      | some b => b :: filterMap f tail✝) ++
      filterMap f l'
Theorem: Nat.factorial_mul_factorial_dvd_factorial
File: Mathlib/Data/Nat/Choose/Basic.lean

tactic: rw [← choose_mul_factorial_mul_factorial hk, mul_assoc]
state_before: n k : ℕ
hk : k ≤ n
⊢ k ! * (n - k)! ∣ n !

tactic: exact dvd_mul_left _ _
state_before: n k : ℕ
hk : k ≤ n
⊢ k ! * (n - k)! ∣ choose n k * (k ! * (n - k)!)
Theorem: Localization.localRingHom_comp
File: Mathlib/RingTheory/Localization/AtPrime.lean

tactic: rw [hIJ, hJK, Ideal.comap_comap f g]
state_before: R : Type ?u.339407
inst✝⁴ : CommSemiring R
M : Submonoid R
S✝ : Type ?u.339596
inst✝³ : CommSemiring S✝
inst✝² : Algebra R S✝
P : Type ?u.339776
inst✝¹ : CommSemiring P
I : Ideal R
hI : Ideal.IsPrime I
S : Type ?u.339916
inst✝ : CommSemiring S
J : Ideal S
hJ : Ideal.IsPrime J
K : Ideal P
hK : Ideal.IsPrime K
f : R →+* S
hIJ : I = Ideal.comap f J
g : S →+* P
hJK : J = Ideal.comap g K
⊢ I = Ideal.comap (RingHom.comp g f) K

tactic: simp only [Function.comp_apply, RingHom.coe_comp, localRingHom_to_map]
state_before: R : Type u_3
inst✝⁴ : CommSemiring R
M : Submonoid R
S✝ : Type ?u.339596
inst✝³ : CommSemiring S✝
inst✝² : Algebra R S✝
P : Type u_2
inst✝¹ : CommSemiring P
I : Ideal R
hI : Ideal.IsPrime I
S : Type u_1
inst✝ : CommSemiring S
J : Ideal S
hJ : Ideal.IsPrime J
K : Ideal P
hK : Ideal.IsPrime K
f : R →+* S
hIJ : I = Ideal.comap f J
g : S →+* P
hJK : J = Ideal.comap g K
r : R
⊢ ↑(RingHom.comp (localRingHom J K g hJK) (localRingHom I J f hIJ)) (↑(algebraMap R (Localization.AtPrime I)) r) =
    ↑(algebraMap ((fun x => P) r) (Localization.AtPrime K)) (↑(RingHom.comp g f) r)
Theorem: Set.SurjOn.leftInvOn_of_rightInvOn
File: Mathlib/Data/Set/Function.lean

tactic: let ⟨x, hx, heq⟩ := hf hy
state_before: α : Type u_1
β : Type u_2
γ : Type ?u.62981
ι : Sort ?u.62984
π : α → Type ?u.62989
s s₁ s₂ : Set α
t t₁ t₂ : Set β
p : Set γ
f f₁ f₂ f₃ : α → β
g g₁ g₂ : β → γ
f' f₁' f₂' : β → α
g' : γ → β
a : α
b : β
hf : SurjOn f s t
hf' : RightInvOn f f' s
y : β
hy : y ∈ t
⊢ f (f' y) = y

tactic: rw [← heq, hf' hx]
state_before: α : Type u_1
β : Type u_2
γ : Type ?u.62981
ι : Sort ?u.62984
π : α → Type ?u.62989
s s₁ s₂ : Set α
t t₁ t₂ : Set β
p : Set γ
f f₁ f₂ f₃ : α → β
g g₁ g₂ : β → γ
f' f₁' f₂' : β → α
g' : γ → β
a : α
b : β
hf : SurjOn f s t
hf' : RightInvOn f f' s
y : β
hy : y ∈ t
x : α
hx : x ∈ s
heq : f x = y
⊢ f (f' y) = y
Theorem: Mathlib.Tactic.Ring.add_pf_add_overlap
File: Mathlib/Tactic/Ring/Basic.lean

tactic: subst_vars
state_before: u : Lean.Level
R : Type u_1
α : Q(Type u)
sα : Q(CommSemiring «$α»)
inst✝ : CommSemiring R
a₁ b₁ c₁ a₂ b₂ c₂ : R
x✝¹ : a₁ + b₁ = c₁
x✝ : a₂ + b₂ = c₂
⊢ a₁ + a₂ + (b₁ + b₂) = c₁ + c₂

tactic: simp [add_assoc, add_left_comm]
state_before: u : Lean.Level
R : Type u_1
α : Q(Type u)
sα : Q(CommSemiring «$α»)
inst✝ : CommSemiring R
a₁ b₁ a₂ b₂ : R
⊢ a₁ + a₂ + (b₁ + b₂) = a₁ + b₁ + (a₂ + b₂)
Theorem: mapClusterPt_iff
File: Mathlib/Topology/Basic.lean

tactic: simp_rw [MapClusterPt, ClusterPt, inf_neBot_iff_frequently_left, frequently_map]
state_before: α : Type u
β : Type v
ι✝ : Sort w
a : α
s s₁ s₂ t : Set α
p p₁ p₂ : α → Prop
inst✝ : TopologicalSpace α
ι : Type u_1
x : α
F : Filter ι
u : ι → α
⊢ MapClusterPt x F u ↔ ∀ (s : Set α), s ∈ 𝓝 x → ∃ᶠ (a : ι) in F, u a ∈ s

tactic: rfl
state_before: α : Type u
β : Type v
ι✝ : Sort w
a : α
s s₁ s₂ t : Set α
p p₁ p₂ : α → Prop
inst✝ : TopologicalSpace α
ι : Type u_1
x : α
F : Filter ι
u : ι → α
⊢ (∀ {p : α → Prop}, (∀ᶠ (x : α) in 𝓝 x, p x) → ∃ᶠ (a : ι) in F, p (u a)) ↔
    ∀ (s : Set α), s ∈ 𝓝 x → ∃ᶠ (a : ι) in F, u a ∈ s
Theorem: Matrix.TransvectionStruct.mul_sumInl_toMatrix_prod
File: Mathlib/LinearAlgebra/Matrix/Transvection.lean

tactic: induction' L with t L IH generalizing M N
state_before: n : Type u_1
p : Type u_2
R : Type u₂
𝕜 : Type ?u.68668
inst✝⁵ : Field 𝕜
inst✝⁴ : DecidableEq n
inst✝³ : DecidableEq p
inst✝² : CommRing R
i j : n
inst✝¹ : Fintype n
inst✝ : Fintype p
M : Matrix n n R
L : List (TransvectionStruct n R)
N : Matrix p p R
⊢ fromBlocks M 0 0 N ⬝ List.prod (List.map (toMatrix ∘ sumInl p) L) =
    fromBlocks (M ⬝ List.prod (List.map toMatrix L)) 0 0 N

tactic: simp
state_before: case nil
n : Type u_1
p : Type u_2
R : Type u₂
𝕜 : Type ?u.68668
inst✝⁵ : Field 𝕜
inst✝⁴ : DecidableEq n
inst✝³ : DecidableEq p
inst✝² : CommRing R
i j : n
inst✝¹ : Fintype n
inst✝ : Fintype p
M✝ : Matrix n n R
N✝ : Matrix p p R
M : Matrix n n R
N : Matrix p p R
⊢ fromBlocks M 0 0 N ⬝ List.prod (List.map (toMatrix ∘ sumInl p) []) =
    fromBlocks (M ⬝ List.prod (List.map toMatrix [])) 0 0 N

tactic: simp [IH, toMatrix_sumInl, fromBlocks_multiply]
state_before: case cons
n : Type u_1
p : Type u_2
R : Type u₂
𝕜 : Type ?u.68668
inst✝⁵ : Field 𝕜
inst✝⁴ : DecidableEq n
inst✝³ : DecidableEq p
inst✝² : CommRing R
i j : n
inst✝¹ : Fintype n
inst✝ : Fintype p
M✝ : Matrix n n R
N✝ : Matrix p p R
t : TransvectionStruct n R
L : List (TransvectionStruct n R)
IH :
  ∀ (M : Matrix n n R) (N : Matrix p p R),
    fromBlocks M 0 0 N ⬝ List.prod (List.map (toMatrix ∘ sumInl p) L) =
      fromBlocks (M ⬝ List.prod (List.map toMatrix L)) 0 0 N
M : Matrix n n R
N : Matrix p p R
⊢ fromBlocks M 0 0 N ⬝ List.prod (List.map (toMatrix ∘ sumInl p) (t :: L)) =
    fromBlocks (M ⬝ List.prod (List.map toMatrix (t :: L))) 0 0 N
Theorem: CategoryTheory.Limits.pullback_symmetry_hom_of_epi_eq
File: Mathlib/CategoryTheory/Limits/Shapes/Pullbacks.lean

tactic: ext <;> simp [inl_eq_inr_of_epi_eq]
state_before: C : Type u
inst✝² : Category C
D : Type u₂
inst✝¹ : Category D
W X Y Z : C
f : X ⟶ Y
inst✝ : Epi f
⊢ (pushoutSymmetry f f).hom = 𝟙 (pushout f f)
Theorem: Turing.Tape.move_right_mk'
File: Mathlib/Computability/TuringMachine.lean

tactic: simp only [Tape.move, Tape.mk', ListBlank.head_cons, eq_self_iff_true, ListBlank.cons_head_tail,
  and_self_iff, ListBlank.tail_cons]
state_before: Γ : Type u_1
inst✝ : Inhabited Γ
L R : ListBlank Γ
⊢ move Dir.right (mk' L R) = mk' (ListBlank.cons (ListBlank.head R) L) (ListBlank.tail R)
Theorem: intervalIntegral.integral_add_adjacent_intervals
File: Mathlib/MeasureTheory/Integral/IntervalIntegral.lean

tactic: rw [← add_neg_eq_zero, ← integral_symm, integral_add_adjacent_intervals_cancel hab hbc]
state_before: ι : Type ?u.15374404
𝕜 : Type ?u.15374407
E : Type u_1
F : Type ?u.15374413
A : Type ?u.15374416
inst✝² : NormedAddCommGroup E
inst✝¹ : CompleteSpace E
inst✝ : NormedSpace ℝ E
a b c d : ℝ
f g : ℝ → E
μ : MeasureTheory.Measure ℝ
hab : IntervalIntegrable f μ a b
hbc : IntervalIntegrable f μ b c
⊢ ((∫ (x : ℝ) in a..b, f x ∂μ) + ∫ (x : ℝ) in b..c, f x ∂μ) = ∫ (x : ℝ) in a..c, f x ∂μ
Theorem: Polynomial.splits_mul
File: Mathlib/Data/Polynomial/Splits.lean

tactic: convert hpf
state_before: F : Type u
K : Type v
L : Type w
inst✝² : CommRing K
inst✝¹ : Field L
inst✝ : Field F
i : K →+* L
f g : K[X]
hf : Splits i f
hg : Splits i g
h : ¬map i (f * g) = 0
p : L[X]
hp : Irreducible p
hpf : p ∣ map i (f * g)
⊢ p ∣ map i f * map i g

tactic: rw [Polynomial.map_mul]
state_before: case h.e'_4
F : Type u
K : Type v
L : Type w
inst✝² : CommRing K
inst✝¹ : Field L
inst✝ : Field F
i : K →+* L
f g : K[X]
hf : Splits i f
hg : Splits i g
h : ¬map i (f * g) = 0
p : L[X]
hp : Irreducible p
hpf : p ∣ map i (f * g)
⊢ map i f * map i g = map i (f * g)

tactic: simp [hf] at h
state_before: F : Type u
K : Type v
L : Type w
inst✝² : CommRing K
inst✝¹ : Field L
inst✝ : Field F
i : K →+* L
f g : K[X]
hf✝ : Splits i f
hg : Splits i g
h : ¬map i (f * g) = 0
p : L[X]
hp : Irreducible p
hpf : p ∣ map i (f * g)
hf : map i f = 0
⊢ False

tactic: simp [hg] at h
state_before: F : Type u
K : Type v
L : Type w
inst✝² : CommRing K
inst✝¹ : Field L
inst✝ : Field F
i : K →+* L
f g : K[X]
hf : Splits i f
hg✝ : Splits i g
h : ¬map i (f * g) = 0
p : L[X]
hp : Irreducible p
hpf : p ∣ map i (f * g)
hg : map i g = 0
⊢ False
Theorem: ContinuousLinearMap.coe_ofIsClosedGraph
File: Mathlib/Analysis/NormedSpace/Banach.lean

tactic: ext
state_before: 𝕜 : Type u_3
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_1
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
f : E →L[𝕜] F
inst✝¹ : CompleteSpace F
inst✝ : CompleteSpace E
g : E →ₗ[𝕜] F
hg : IsClosed ↑(LinearMap.graph g)
⊢ ↑(ofIsClosedGraph hg) = g

tactic: rfl
state_before: case h
𝕜 : Type u_3
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_1
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
f : E →L[𝕜] F
inst✝¹ : CompleteSpace F
inst✝ : CompleteSpace E
g : E →ₗ[𝕜] F
hg : IsClosed ↑(LinearMap.graph g)
x✝ : E
⊢ ↑↑(ofIsClosedGraph hg) x✝ = ↑g x✝
Theorem: toIocMod_eq_toIocMod
File: Mathlib/Algebra/Order/ToIntervalMod.lean

tactic: refine' ⟨fun h => ⟨toIocDiv hp a c - toIocDiv hp a b, _⟩, fun h => _⟩
state_before: α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a b c : α
n : ℤ
⊢ toIocMod hp a b = toIocMod hp a c ↔ ∃ n, c - b = n • p

tactic: conv_lhs => rw [← toIocMod_add_toIocDiv_zsmul hp a b, ← toIocMod_add_toIocDiv_zsmul hp a c]
state_before: case refine'_1
α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a b c : α
n : ℤ
h : toIocMod hp a b = toIocMod hp a c
⊢ c - b = (toIocDiv hp a c - toIocDiv hp a b) • p

tactic: rw [h, sub_smul]
state_before: case refine'_1
α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a b c : α
n : ℤ
h : toIocMod hp a b = toIocMod hp a c
⊢ toIocMod hp a c + toIocDiv hp a c • p - (toIocMod hp a b + toIocDiv hp a b • p) =
    (toIocDiv hp a c - toIocDiv hp a b) • p

tactic: abel
state_before: case refine'_1
α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a b c : α
n : ℤ
h : toIocMod hp a b = toIocMod hp a c
⊢ toIocMod hp a c + toIocDiv hp a c • p - (toIocMod hp a c + toIocDiv hp a b • p) =
    toIocDiv hp a c • p - toIocDiv hp a b • p

tactic: rcases h with ⟨z, hz⟩
state_before: case refine'_2
α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a b c : α
n : ℤ
h : ∃ n, c - b = n • p
⊢ toIocMod hp a b = toIocMod hp a c

tactic: rw [sub_eq_iff_eq_add] at hz
state_before: case refine'_2.intro
α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a b c : α
n z : ℤ
hz : c - b = z • p
⊢ toIocMod hp a b = toIocMod hp a c

tactic: rw [hz, toIocMod_zsmul_add]
state_before: case refine'_2.intro
α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a b c : α
n z : ℤ
hz : c = z • p + b
⊢ toIocMod hp a b = toIocMod hp a c
Theorem: LucasLehmer.sMod_lt
File: Mathlib/NumberTheory/LucasLehmer.lean

tactic: rw [← sMod_mod]
state_before: p : ℕ
w : 0 < p
i : ℕ
⊢ sMod p i < 2 ^ p - 1

tactic: refine (Int.emod_lt _ (mersenne_int_ne_zero p w)).trans_eq ?_
state_before: p : ℕ
w : 0 < p
i : ℕ
⊢ sMod p i % (2 ^ p - 1) < 2 ^ p - 1

tactic: exact abs_of_nonneg (mersenne_int_pos w).le
state_before: p : ℕ
w : 0 < p
i : ℕ
⊢ abs (2 ^ p - 1) = 2 ^ p - 1
Theorem: Real.inv_sign
File: Mathlib/Data/Real/Sign.lean

tactic: obtain hn | hz | hp := sign_apply_eq r
state_before: r : ℝ
⊢ (sign r)⁻¹ = sign r

tactic: rw [hn]
state_before: case inl
r : ℝ
hn : sign r = -1
⊢ (sign r)⁻¹ = sign r

tactic: norm_num
state_before: case inl
r : ℝ
hn : sign r = -1
⊢ (-1)⁻¹ = -1

tactic: rw [hz]
state_before: case inr.inl
r : ℝ
hz : sign r = 0
⊢ (sign r)⁻¹ = sign r

tactic: exact inv_zero
state_before: case inr.inl
r : ℝ
hz : sign r = 0
⊢ 0⁻¹ = 0

tactic: rw [hp]
state_before: case inr.inr
r : ℝ
hp : sign r = 1
⊢ (sign r)⁻¹ = sign r

tactic: exact inv_one
state_before: case inr.inr
r : ℝ
hp : sign r = 1
⊢ 1⁻¹ = 1
Theorem: isClosed_iff_clusterPt
File: Mathlib/Topology/Basic.lean

tactic: simp only [subset_def, mem_closure_iff_clusterPt]
state_before: α : Type u
β : Type v
ι : Sort w
a : α
s✝ s₁ s₂ t : Set α
p p₁ p₂ : α → Prop
inst✝ : TopologicalSpace α
s : Set α
⊢ closure s ⊆ s ↔ ∀ (a : α), ClusterPt a (𝓟 s) → a ∈ s
Theorem: ChainComplex.mk_d_2_0
File: Mathlib/Algebra/Homology/HomologicalComplex.lean

tactic: change ite (2 = 1 + 1) (𝟙 X₂ ≫ d₁) 0 = d₁
state_before: ι : Type ?u.184152
V : Type u
inst✝¹ : Category V
inst✝ : HasZeroMorphisms V
X₀ X₁ X₂ : V
d₀ : X₁ ⟶ X₀
d₁ : X₂ ⟶ X₁
s : d₁ ≫ d₀ = 0
succ :
  (t : (X₀ : V) ×' (X₁ : V) ×' (X₂ : V) ×' (d₀ : X₁ ⟶ X₀) ×' (d₁ : X₂ ⟶ X₁) ×' d₁ ≫ d₀ = 0) →
    (X₃ : V) ×' (d₂ : X₃ ⟶ t.snd.snd.fst) ×' d₂ ≫ t.snd.snd.snd.snd.fst = 0
⊢ HomologicalComplex.d (mk X₀ X₁ X₂ d₀ d₁ s succ) 2 1 = d₁

tactic: rw [if_pos rfl, Category.id_comp]
state_before: ι : Type ?u.184152
V : Type u
inst✝¹ : Category V
inst✝ : HasZeroMorphisms V
X₀ X₁ X₂ : V
d₀ : X₁ ⟶ X₀
d₁ : X₂ ⟶ X₁
s : d₁ ≫ d₀ = 0
succ :
  (t : (X₀ : V) ×' (X₁ : V) ×' (X₂ : V) ×' (d₀ : X₁ ⟶ X₀) ×' (d₁ : X₂ ⟶ X₁) ×' d₁ ≫ d₀ = 0) →
    (X₃ : V) ×' (d₂ : X₃ ⟶ t.snd.snd.fst) ×' d₂ ≫ t.snd.snd.snd.snd.fst = 0
⊢ (if 2 = 1 + 1 then 𝟙 X₂ ≫ d₁ else 0) = d₁
Theorem: PNat.card_fintype_Ioo
File: Mathlib/Data/PNat/Interval.lean

tactic: rw [← card_Ioo, Fintype.card_ofFinset]
state_before: a b : ℕ+
⊢ Fintype.card ↑(Set.Ioo a b) = ↑b - ↑a - 1
Theorem: MeasureTheory.MeasurePreserving.sigmaFinite
File: Mathlib/Dynamics/Ergodic/MeasurePreserving.lean

tactic: rwa [hf.map_eq]
state_before: α : Type u_1
β : Type u_2
γ : Type ?u.271138
δ : Type ?u.271141
inst✝⁴ : MeasurableSpace α
inst✝³ : MeasurableSpace β
inst✝² : MeasurableSpace γ
inst✝¹ : MeasurableSpace δ
μa : Measure α
μb : Measure β
μc : Measure γ
μd : Measure δ
f : α → β
hf : MeasurePreserving f
inst✝ : SigmaFinite μb
⊢ SigmaFinite (map f μa)