1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: OpenEmbedding.of_comp_iff
File: Mathlib/Topology/Maps.lean

tactic: simp only [openEmbedding_iff_continuous_injective_open, ← hg.isOpenMap_iff, ←
  hg.1.continuous_iff, hg.inj.of_comp_iff]
state_before: X : Type u_1
Y : Type u_2
Z : Type u_3
ι : Type u_4
f✝ : X → Y
g : Y → Z
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : TopologicalSpace Z
f : X → Y
hg : OpenEmbedding g
⊢ OpenEmbedding (g ∘ f) ↔ OpenEmbedding f
state_after: no goals
Theorem: MeasureTheory.Measure.lt_iff
File: Mathlib/MeasureTheory/Measure/MeasureSpace.lean

tactic: simp only [le_iff, not_forall, not_le, exists_prop]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Type u_5
R : Type u_6
R' : Type u_7
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
inst✝ : MeasurableSpace γ
μ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s s' t : Set α
⊢ ¬ν ≤ μ ↔ ∃ s, MeasurableSet s ∧ μ s < ν s
state_after: no goals
Theorem: Substring.ValidFor.takeWhile
File: .lake/packages/batteries/Batteries/Data/String/Lemmas.lean

tactic: simp only [Substring.takeWhile, takeWhileAux_of_valid]
state_before: l m r : List Char
p : Char → Bool
⊢ ValidFor l (List.takeWhile p m) (List.dropWhile p m ++ r)
    ({ str := { data := l ++ m ++ r }, startPos := { byteIdx := utf8Len l },
          stopPos := { byteIdx := utf8Len l + utf8Len m } }.takeWhile
      p)
state_after: l m r : List Char
p : Char → Bool
⊢ ValidFor l (List.takeWhile p m) (List.dropWhile p m ++ r)
    { str := { data := l ++ m ++ r }, startPos := { byteIdx := utf8Len l },
      stopPos := { byteIdx := utf8Len l + utf8Len (List.takeWhile p m) } }

tactic: refine' .of_eq .. <;> simp
state_before: l m r : List Char
p : Char → Bool
⊢ ValidFor l (List.takeWhile p m) (List.dropWhile p m ++ r)
    { str := { data := l ++ m ++ r }, startPos := { byteIdx := utf8Len l },
      stopPos := { byteIdx := utf8Len l + utf8Len (List.takeWhile p m) } }
state_after: case refine'_1
l m r : List Char
p : Char → Bool
⊢ m ++ r = List.takeWhile p m ++ (List.dropWhile p m ++ r)

tactic: rw [← List.append_assoc, List.takeWhile_append_dropWhile]
state_before: case refine'_1
l m r : List Char
p : Char → Bool
⊢ m ++ r = List.takeWhile p m ++ (List.dropWhile p m ++ r)
state_after: no goals
Theorem: minpoly.sub_algebraMap
File: Mathlib/FieldTheory/Minpoly/Field.lean

tactic: simpa [sub_eq_add_neg] using add_algebraMap hx (-a)
state_before: A : Type u_1
B✝ : Type u_2
inst✝⁴ : Field A
inst✝³ : Ring B✝
inst✝² : Algebra A B✝
x✝ : B✝
B : Type u_3
inst✝¹ : CommRing B
inst✝ : Algebra A B
x : B
hx : IsIntegral A x
a : A
⊢ minpoly A (x - (algebraMap A B) a) = (minpoly A x).comp (X + C a)
state_after: no goals
Theorem: SimpleGraph.exists_minimal_degree_vertex
File: Mathlib/Combinatorics/SimpleGraph/Finite.lean

tactic: obtain ⟨t, ht : _ = _⟩ := min_of_nonempty (univ_nonempty.image fun v => G.degree v)
state_before: V : Type u_1
G : SimpleGraph V
e : Sym2 V
inst✝² : Fintype V
inst✝¹ : DecidableRel G.Adj
inst✝ : Nonempty V
⊢ ∃ v, G.minDegree = G.degree v
state_after: case intro
V : Type u_1
G : SimpleGraph V
e : Sym2 V
inst✝² : Fintype V
inst✝¹ : DecidableRel G.Adj
inst✝ : Nonempty V
t : ℕ
ht : (image (fun v => G.degree v) univ).min = ↑t
⊢ ∃ v, G.minDegree = G.degree v

tactic: obtain ⟨v, _, rfl⟩ := mem_image.mp (mem_of_min ht)
state_before: case intro
V : Type u_1
G : SimpleGraph V
e : Sym2 V
inst✝² : Fintype V
inst✝¹ : DecidableRel G.Adj
inst✝ : Nonempty V
t : ℕ
ht : (image (fun v => G.degree v) univ).min = ↑t
⊢ ∃ v, G.minDegree = G.degree v
state_after: case intro.intro.intro
V : Type u_1
G : SimpleGraph V
e : Sym2 V
inst✝² : Fintype V
inst✝¹ : DecidableRel G.Adj
inst✝ : Nonempty V
v : V
left✝ : v ∈ univ
ht : (image (fun v => G.degree v) univ).min = ↑(G.degree v)
⊢ ∃ v, G.minDegree = G.degree v

tactic: exact ⟨v, by simp [minDegree, ht]⟩
state_before: case intro.intro.intro
V : Type u_1
G : SimpleGraph V
e : Sym2 V
inst✝² : Fintype V
inst✝¹ : DecidableRel G.Adj
inst✝ : Nonempty V
v : V
left✝ : v ∈ univ
ht : (image (fun v => G.degree v) univ).min = ↑(G.degree v)
⊢ ∃ v, G.minDegree = G.degree v
state_after: no goals

tactic: simp [minDegree, ht]
state_before: V : Type u_1
G : SimpleGraph V
e : Sym2 V
inst✝² : Fintype V
inst✝¹ : DecidableRel G.Adj
inst✝ : Nonempty V
v : V
left✝ : v ∈ univ
ht : (image (fun v => G.degree v) univ).min = ↑(G.degree v)
⊢ G.minDegree = G.degree v
state_after: no goals
Theorem: nhdsWithin_biUnion
File: Mathlib/Topology/ContinuousOn.lean

tactic: simp
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : TopologicalSpace α
ι : Type u_5
I : Set ι
hI : I.Finite
s : ι → Set α
a : α
⊢ 𝓝[⋃ i ∈ ∅, s i] a = ⨆ i ∈ ∅, 𝓝[s i] a
state_after: no goals

tactic: simp only [hT, nhdsWithin_union, iSup_insert, biUnion_insert]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : TopologicalSpace α
ι : Type u_5
I : Set ι
hI : I.Finite
s : ι → Set α
a : α
a✝ : ι
s✝ : Set ι
x✝¹ : a✝ ∉ s✝
x✝ : s✝.Finite
hT : 𝓝[⋃ i ∈ s✝, s i] a = ⨆ i ∈ s✝, 𝓝[s i] a
⊢ 𝓝[⋃ i ∈ insert a✝ s✝, s i] a = ⨆ i ∈ insert a✝ s✝, 𝓝[s i] a
state_after: no goals
Theorem: inv_le_iff_one_le_mul
File: Mathlib/Algebra/Order/Group/Defs.lean

tactic: rw [inv_mul_self]
state_before: α : Type u
inst✝² : Group α
inst✝¹ : LE α
inst✝ : CovariantClass α α (swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a b c : α
⊢ a⁻¹ * a ≤ b * a ↔ 1 ≤ b * a
state_after: no goals
Theorem: Finset.strictMono_iff_forall_lt_cons
File: Mathlib/Data/Finset/Interval.lean

tactic: classical simp [strictMono_iff_forall_covBy, covBy_iff_exists_cons]
state_before: α : Type u_1
β : Type u_2
inst✝ : Preorder β
s t : Finset α
f : Finset α → β
⊢ StrictMono f ↔ ∀ (s : Finset α) ⦃a : α⦄ (ha : a ∉ s), f s < f (cons a s ha)
state_after: no goals

tactic: simp [strictMono_iff_forall_covBy, covBy_iff_exists_cons]
state_before: α : Type u_1
β : Type u_2
inst✝ : Preorder β
s t : Finset α
f : Finset α → β
⊢ StrictMono f ↔ ∀ (s : Finset α) ⦃a : α⦄ (ha : a ∉ s), f s < f (cons a s ha)
state_after: no goals
Theorem: le_comap_range_lTensor
File: Mathlib/LinearAlgebra/TensorProduct/RightExactness.lean

tactic: rintro x ⟨n, rfl⟩
state_before: R : Type u_1
inst✝⁸ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid N
inst✝⁵ : AddCommMonoid P
inst✝⁴ : AddCommMonoid Q
inst✝³ : Module R M
inst✝² : Module R N
inst✝¹ : Module R P
inst✝ : Module R Q
f : M →ₗ[R] N
g : N →ₗ[R] P
q : Q
⊢ range g ≤ Submodule.comap ((TensorProduct.mk R Q P) q) (range (lTensor Q g))
state_after: case intro
R : Type u_1
inst✝⁸ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid N
inst✝⁵ : AddCommMonoid P
inst✝⁴ : AddCommMonoid Q
inst✝³ : Module R M
inst✝² : Module R N
inst✝¹ : Module R P
inst✝ : Module R Q
f : M →ₗ[R] N
g : N →ₗ[R] P
q : Q
n : N
⊢ g n ∈ Submodule.comap ((TensorProduct.mk R Q P) q) (range (lTensor Q g))

tactic: exact ⟨q ⊗ₜ[R] n, rfl⟩
state_before: case intro
R : Type u_1
inst✝⁸ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid N
inst✝⁵ : AddCommMonoid P
inst✝⁴ : AddCommMonoid Q
inst✝³ : Module R M
inst✝² : Module R N
inst✝¹ : Module R P
inst✝ : Module R Q
f : M →ₗ[R] N
g : N →ₗ[R] P
q : Q
n : N
⊢ g n ∈ Submodule.comap ((TensorProduct.mk R Q P) q) (range (lTensor Q g))
state_after: no goals
Theorem: Polynomial.not_dvd_of_degree_lt
File: Mathlib/Algebra/Polynomial/RingDivision.lean

tactic: by_contra hcontra
state_before: R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝¹ : Semiring R
inst✝ : NoZeroDivisors R
p✝ q✝ p q : R[X]
h0 : q ≠ 0
hl : q.degree < p.degree
⊢ ¬p ∣ q
state_after: R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝¹ : Semiring R
inst✝ : NoZeroDivisors R
p✝ q✝ p q : R[X]
h0 : q ≠ 0
hl : q.degree < p.degree
hcontra : p ∣ q
⊢ False

tactic: exact h0 (eq_zero_of_dvd_of_degree_lt hcontra hl)
state_before: R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝¹ : Semiring R
inst✝ : NoZeroDivisors R
p✝ q✝ p q : R[X]
h0 : q ≠ 0
hl : q.degree < p.degree
hcontra : p ∣ q
⊢ False
state_after: no goals
Theorem: EMetric.mem_closure_iff
File: Mathlib/Topology/EMetricSpace/Basic.lean

tactic: simp only [mem_ball, edist_comm x]
state_before: α : Type u
β : Type v
X : Type u_1
inst✝ : PseudoEMetricSpace α
x y z : α
ε ε₁ ε₂ : ℝ≥0∞
s t : Set α
⊢ (∀ (i : ℝ≥0∞), 0 < i → ∃ y ∈ s, y ∈ ball x i) ↔ ∀ ε > 0, ∃ y ∈ s, edist x y < ε
state_after: no goals
Theorem: Monoid.Coprod.range_eq
File: Mathlib/GroupTheory/Coprod/Basic.lean

tactic: rw [MonoidHom.range_eq_map, ← range_inl_sup_range_inr, Subgroup.map_sup, MonoidHom.map_range,
  MonoidHom.map_range]
state_before: G : Type u_1
H : Type u_2
inst✝² : Group G
inst✝¹ : Group H
K : Type u_3
inst✝ : Group K
f : G ∗ H →* K
⊢ f.range = (f.comp inl).range ⊔ (f.comp inr).range
state_after: no goals
Theorem: ApplicativeTransformation.preserves_map'
File: Mathlib/Control/Traversable/Basic.lean

tactic: ext y
state_before: F : Type u → Type v
inst✝³ : Applicative F
inst✝² : LawfulApplicative F
G : Type u → Type w
inst✝¹ : Applicative G
inst✝ : LawfulApplicative G
η : ApplicativeTransformation F G
α β : Type u
x : α → β
⊢ (fun {α} => η.app α) ∘ Functor.map x = Functor.map x ∘ fun {α} => η.app α
state_after: case h
F : Type u → Type v
inst✝³ : Applicative F
inst✝² : LawfulApplicative F
G : Type u → Type w
inst✝¹ : Applicative G
inst✝ : LawfulApplicative G
η : ApplicativeTransformation F G
α β : Type u
x : α → β
y : F α
⊢ ((fun {α} => η.app α) ∘ Functor.map x) y = (Functor.map x ∘ fun {α} => η.app α) y

tactic: exact preserves_map η x y
state_before: case h
F : Type u → Type v
inst✝³ : Applicative F
inst✝² : LawfulApplicative F
G : Type u → Type w
inst✝¹ : Applicative G
inst✝ : LawfulApplicative G
η : ApplicativeTransformation F G
α β : Type u
x : α → β
y : F α
⊢ ((fun {α} => η.app α) ∘ Functor.map x) y = (Functor.map x ∘ fun {α} => η.app α) y
state_after: no goals
Theorem: SimplexCategory.len_le_of_epi
File: Mathlib/AlgebraicTopology/SimplexCategory.lean

tactic: intro hyp_f_epi
state_before: x y : SimplexCategory
f : x ⟶ y
⊢ Epi f → y.len ≤ x.len
state_after: x y : SimplexCategory
f : x ⟶ y
hyp_f_epi : Epi f
⊢ y.len ≤ x.len

tactic: have f_surj : Function.Surjective f.toOrderHom.toFun := epi_iff_surjective.1 hyp_f_epi
state_before: x y : SimplexCategory
f : x ⟶ y
hyp_f_epi : Epi f
⊢ y.len ≤ x.len
state_after: x y : SimplexCategory
f : x ⟶ y
hyp_f_epi : Epi f
f_surj : Function.Surjective (Hom.toOrderHom f).toFun
⊢ y.len ≤ x.len

tactic: simpa using Fintype.card_le_of_surjective f.toOrderHom.toFun f_surj
state_before: x y : SimplexCategory
f : x ⟶ y
hyp_f_epi : Epi f
f_surj : Function.Surjective (Hom.toOrderHom f).toFun
⊢ y.len ≤ x.len
state_after: no goals
Theorem: Equiv.Perm.toList_eq_nil_iff
File: Mathlib/GroupTheory/Perm/Cycle/Concrete.lean

tactic: simp [toList]
state_before: α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
p✝ : Perm α
x✝ : α
p : Perm α
x : α
⊢ p.toList x = [] ↔ x ∉ p.support
state_after: no goals
Theorem: QuadraticForm.associated_baseChange
File: Mathlib/LinearAlgebra/QuadraticForm/TensorProduct.lean

tactic: dsimp only [QuadraticForm.baseChange, LinearMap.baseChange]
state_before: R : Type uR
A : Type uA
M₁ : Type uM₁
M₂ : Type uM₂
inst✝¹² : CommRing R
inst✝¹¹ : CommRing A
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : Algebra R A
inst✝⁷ : Module R M₁
inst✝⁶ : Module A M₁
inst✝⁵ : SMulCommClass R A M₁
inst✝⁴ : SMulCommClass A R M₁
inst✝³ : IsScalarTower R A M₁
inst✝² : Module R M₂
inst✝¹ : Invertible 2
inst✝ : Invertible 2
Q : QuadraticForm R M₂
⊢ associated (QuadraticForm.baseChange A Q) = BilinForm.baseChange A (associated Q)
state_after: R : Type uR
A : Type uA
M₁ : Type uM₁
M₂ : Type uM₂
inst✝¹² : CommRing R
inst✝¹¹ : CommRing A
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : Algebra R A
inst✝⁷ : Module R M₁
inst✝⁶ : Module A M₁
inst✝⁵ : SMulCommClass R A M₁
inst✝⁴ : SMulCommClass A R M₁
inst✝³ : IsScalarTower R A M₁
inst✝² : Module R M₂
inst✝¹ : Invertible 2
inst✝ : Invertible 2
Q : QuadraticForm R M₂
⊢ associated (sq.tmul Q) = BilinForm.baseChange A (associated Q)

tactic: rw [associated_tmul (QuadraticForm.sq (R := A)) Q, associated_sq]
state_before: R : Type uR
A : Type uA
M₁ : Type uM₁
M₂ : Type uM₂
inst✝¹² : CommRing R
inst✝¹¹ : CommRing A
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : Algebra R A
inst✝⁷ : Module R M₁
inst✝⁶ : Module A M₁
inst✝⁵ : SMulCommClass R A M₁
inst✝⁴ : SMulCommClass A R M₁
inst✝³ : IsScalarTower R A M₁
inst✝² : Module R M₂
inst✝¹ : Invertible 2
inst✝ : Invertible 2
Q : QuadraticForm R M₂
⊢ associated (sq.tmul Q) = BilinForm.baseChange A (associated Q)
state_after: R : Type uR
A : Type uA
M₁ : Type uM₁
M₂ : Type uM₂
inst✝¹² : CommRing R
inst✝¹¹ : CommRing A
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : Algebra R A
inst✝⁷ : Module R M₁
inst✝⁶ : Module A M₁
inst✝⁵ : SMulCommClass R A M₁
inst✝⁴ : SMulCommClass A R M₁
inst✝³ : IsScalarTower R A M₁
inst✝² : Module R M₂
inst✝¹ : Invertible 2
inst✝ : Invertible 2
Q : QuadraticForm R M₂
⊢ BilinForm.tmul (LinearMap.mul A A) (associated Q) = BilinForm.baseChange A (associated Q)

tactic: exact rfl
state_before: R : Type uR
A : Type uA
M₁ : Type uM₁
M₂ : Type uM₂
inst✝¹² : CommRing R
inst✝¹¹ : CommRing A
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : Algebra R A
inst✝⁷ : Module R M₁
inst✝⁶ : Module A M₁
inst✝⁵ : SMulCommClass R A M₁
inst✝⁴ : SMulCommClass A R M₁
inst✝³ : IsScalarTower R A M₁
inst✝² : Module R M₂
inst✝¹ : Invertible 2
inst✝ : Invertible 2
Q : QuadraticForm R M₂
⊢ BilinForm.tmul (LinearMap.mul A A) (associated Q) = BilinForm.baseChange A (associated Q)
state_after: no goals
Theorem: AddHom.le_map_tsub
File: Mathlib/Algebra/Order/Sub/Basic.lean

tactic: rw [tsub_le_iff_right, ← f.map_add]
state_before: α : Type u_1
β : Type u_2
inst✝⁷ : Preorder α
inst✝⁶ : Add α
inst✝⁵ : Sub α
inst✝⁴ : OrderedSub α
a✝ b✝ c d : α
inst✝³ : Preorder β
inst✝² : Add β
inst✝¹ : Sub β
inst✝ : OrderedSub β
f : AddHom α β
hf : Monotone ⇑f
a b : α
⊢ f a - f b ≤ f (a - b)
state_after: α : Type u_1
β : Type u_2
inst✝⁷ : Preorder α
inst✝⁶ : Add α
inst✝⁵ : Sub α
inst✝⁴ : OrderedSub α
a✝ b✝ c d : α
inst✝³ : Preorder β
inst✝² : Add β
inst✝¹ : Sub β
inst✝ : OrderedSub β
f : AddHom α β
hf : Monotone ⇑f
a b : α
⊢ f a ≤ f (a - b + b)

tactic: exact hf le_tsub_add
state_before: α : Type u_1
β : Type u_2
inst✝⁷ : Preorder α
inst✝⁶ : Add α
inst✝⁵ : Sub α
inst✝⁴ : OrderedSub α
a✝ b✝ c d : α
inst✝³ : Preorder β
inst✝² : Add β
inst✝¹ : Sub β
inst✝ : OrderedSub β
f : AddHom α β
hf : Monotone ⇑f
a b : α
⊢ f a ≤ f (a - b + b)
state_after: no goals
Theorem: clusterPt_iff_ultrafilter
File: Mathlib/Topology/Basic.lean

tactic: simp_rw [ClusterPt, ← le_inf_iff, exists_ultrafilter_iff, inf_comm]
state_before: X : Type u
Y : Type v
ι : Sort w
α : Type u_1
β : Type u_2
x : X
s s₁ s₂ t : Set X
p p₁ p₂ : X → Prop
inst✝ : TopologicalSpace X
f : Filter X
⊢ ClusterPt x f ↔ ∃ u, ↑u ≤ f ∧ ↑u ≤ 𝓝 x
state_after: no goals
Theorem: Finset.weightedVSubOfPoint_apply
File: Mathlib/LinearAlgebra/AffineSpace/Combination.lean

tactic: simp [weightedVSubOfPoint, LinearMap.sum_apply]
state_before: k : Type u_1
V : Type u_2
P : Type u_3
inst✝² : Ring k
inst✝¹ : AddCommGroup V
inst✝ : Module k V
S : AffineSpace V P
ι : Type u_4
s : Finset ι
ι₂ : Type u_5
s₂ : Finset ι₂
w : ι → k
p : ι → P
b : P
⊢ (s.weightedVSubOfPoint p b) w = ∑ i ∈ s, w i • (p i -ᵥ b)
state_after: no goals
Theorem: charZero_of_inj_zero
File: Mathlib/Algebra/CharZero/Defs.lean

tactic: induction' m with m ih generalizing n
state_before: R : Type u_1
inst✝ : AddGroupWithOne R
H : ∀ (n : ℕ), ↑n = 0 → n = 0
m n : ℕ
h : ↑m = ↑n
⊢ m = n
state_after: case zero
R : Type u_1
inst✝ : AddGroupWithOne R
H : ∀ (n : ℕ), ↑n = 0 → n = 0
n : ℕ
h : ↑0 = ↑n
⊢ 0 = n

case succ
R : Type u_1
inst✝ : AddGroupWithOne R
H : ∀ (n : ℕ), ↑n = 0 → n = 0
m : ℕ
ih : ∀ (n : ℕ), ↑m = ↑n → m = n
n : ℕ
h : ↑(m + 1) = ↑n
⊢ m + 1 = n

tactic: cases' n with n
state_before: case succ
R : Type u_1
inst✝ : AddGroupWithOne R
H : ∀ (n : ℕ), ↑n = 0 → n = 0
m : ℕ
ih : ∀ (n : ℕ), ↑m = ↑n → m = n
n : ℕ
h : ↑(m + 1) = ↑n
⊢ m + 1 = n
state_after: case succ.zero
R : Type u_1
inst✝ : AddGroupWithOne R
H : ∀ (n : ℕ), ↑n = 0 → n = 0
m : ℕ
ih : ∀ (n : ℕ), ↑m = ↑n → m = n
h : ↑(m + 1) = ↑0
⊢ m + 1 = 0

case succ.succ
R : Type u_1
inst✝ : AddGroupWithOne R
H : ∀ (n : ℕ), ↑n = 0 → n = 0
m : ℕ
ih : ∀ (n : ℕ), ↑m = ↑n → m = n
n : ℕ
h : ↑(m + 1) = ↑(n + 1)
⊢ m + 1 = n + 1

tactic: simp only [Nat.cast_succ, add_right_cancel_iff] at h
state_before: case succ.succ
R : Type u_1
inst✝ : AddGroupWithOne R
H : ∀ (n : ℕ), ↑n = 0 → n = 0
m : ℕ
ih : ∀ (n : ℕ), ↑m = ↑n → m = n
n : ℕ
h : ↑(m + 1) = ↑(n + 1)
⊢ m + 1 = n + 1
state_after: case succ.succ
R : Type u_1
inst✝ : AddGroupWithOne R
H : ∀ (n : ℕ), ↑n = 0 → n = 0
m : ℕ
ih : ∀ (n : ℕ), ↑m = ↑n → m = n
n : ℕ
h : ↑m = ↑n
⊢ m + 1 = n + 1

tactic: rwa [ih]
state_before: case succ.succ
R : Type u_1
inst✝ : AddGroupWithOne R
H : ∀ (n : ℕ), ↑n = 0 → n = 0
m : ℕ
ih : ∀ (n : ℕ), ↑m = ↑n → m = n
n : ℕ
h : ↑m = ↑n
⊢ m + 1 = n + 1
state_after: no goals

tactic: rw [H n]
state_before: case zero
R : Type u_1
inst✝ : AddGroupWithOne R
H : ∀ (n : ℕ), ↑n = 0 → n = 0
n : ℕ
h : ↑0 = ↑n
⊢ 0 = n
state_after: case zero
R : Type u_1
inst✝ : AddGroupWithOne R
H : ∀ (n : ℕ), ↑n = 0 → n = 0
n : ℕ
h : ↑0 = ↑n
⊢ ↑n = 0

tactic: rw [← h, Nat.cast_zero]
state_before: case zero
R : Type u_1
inst✝ : AddGroupWithOne R
H : ∀ (n : ℕ), ↑n = 0 → n = 0
n : ℕ
h : ↑0 = ↑n
⊢ ↑n = 0
state_after: no goals

tactic: apply H
state_before: case succ.zero
R : Type u_1
inst✝ : AddGroupWithOne R
H : ∀ (n : ℕ), ↑n = 0 → n = 0
m : ℕ
ih : ∀ (n : ℕ), ↑m = ↑n → m = n
h : ↑(m + 1) = ↑0
⊢ m + 1 = 0
state_after: case succ.zero.a
R : Type u_1
inst✝ : AddGroupWithOne R
H : ∀ (n : ℕ), ↑n = 0 → n = 0
m : ℕ
ih : ∀ (n : ℕ), ↑m = ↑n → m = n
h : ↑(m + 1) = ↑0
⊢ ↑(m + 1) = 0

tactic: rw [h, Nat.cast_zero]
state_before: case succ.zero.a
R : Type u_1
inst✝ : AddGroupWithOne R
H : ∀ (n : ℕ), ↑n = 0 → n = 0
m : ℕ
ih : ∀ (n : ℕ), ↑m = ↑n → m = n
h : ↑(m + 1) = ↑0
⊢ ↑(m + 1) = 0
state_after: no goals
Theorem: CategoryTheory.CechNerveTerminalFrom.wideCospan.limitIsoPi_hom_comp_pi
File: Mathlib/AlgebraicTopology/CechNerve.lean

tactic: rw [← wideCospan.limitIsoPi_inv_comp_pi, Iso.hom_inv_id_assoc]
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : HasTerminal C
ι : Type w
inst✝¹ : HasFiniteProducts C
inst✝ : Finite ι
X : C
j : ι
⊢ (limitIsoPi ι X).hom ≫ Pi.π (fun x => X) j = WidePullback.π (fun x => terminal.from X) j
state_after: no goals
Theorem: Filter.cocompact_eq_cofinite
File: Mathlib/Topology/Compactness/Compact.lean

tactic: simp only [cocompact, hasBasis_cofinite.eq_biInf, isCompact_iff_finite]
state_before: X✝ : Type u
Y : Type v
ι : Type u_1
inst✝³ : TopologicalSpace X✝
inst✝² : TopologicalSpace Y
s t : Set X✝
X : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : DiscreteTopology X
⊢ cocompact X = cofinite
state_after: no goals
Theorem: dist_midpoint_midpoint_le'
File: Mathlib/Analysis/NormedSpace/AddTorsor.lean

tactic: rw [dist_eq_norm_vsub V, dist_eq_norm_vsub V, dist_eq_norm_vsub V, midpoint_vsub_midpoint]
state_before: α : Type u_1
V : Type u_2
P : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁹ : SeminormedAddCommGroup V
inst✝⁸ : PseudoMetricSpace P
inst✝⁷ : NormedAddTorsor V P
inst✝⁶ : NormedAddCommGroup W
inst✝⁵ : MetricSpace Q
inst✝⁴ : NormedAddTorsor W Q
𝕜 : Type u_6
inst✝³ : NormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : Invertible 2
p₁ p₂ p₃ p₄ : P
⊢ dist (midpoint 𝕜 p₁ p₂) (midpoint 𝕜 p₃ p₄) ≤ (dist p₁ p₃ + dist p₂ p₄) / ‖2‖
state_after: α : Type u_1
V : Type u_2
P : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁹ : SeminormedAddCommGroup V
inst✝⁸ : PseudoMetricSpace P
inst✝⁷ : NormedAddTorsor V P
inst✝⁶ : NormedAddCommGroup W
inst✝⁵ : MetricSpace Q
inst✝⁴ : NormedAddTorsor W Q
𝕜 : Type u_6
inst✝³ : NormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : Invertible 2
p₁ p₂ p₃ p₄ : P
⊢ ‖midpoint 𝕜 (p₁ -ᵥ p₃) (p₂ -ᵥ p₄)‖ ≤ (‖p₁ -ᵥ p₃‖ + ‖p₂ -ᵥ p₄‖) / ‖2‖

tactic: rw [midpoint_eq_smul_add, norm_smul, invOf_eq_inv, norm_inv, ← div_eq_inv_mul]
state_before: α : Type u_1
V : Type u_2
P : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁹ : SeminormedAddCommGroup V
inst✝⁸ : PseudoMetricSpace P
inst✝⁷ : NormedAddTorsor V P
inst✝⁶ : NormedAddCommGroup W
inst✝⁵ : MetricSpace Q
inst✝⁴ : NormedAddTorsor W Q
𝕜 : Type u_6
inst✝³ : NormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : Invertible 2
p₁ p₂ p₃ p₄ : P
⊢ ‖midpoint 𝕜 (p₁ -ᵥ p₃) (p₂ -ᵥ p₄)‖ ≤ (‖p₁ -ᵥ p₃‖ + ‖p₂ -ᵥ p₄‖) / ‖2‖
state_after: α : Type u_1
V : Type u_2
P : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁹ : SeminormedAddCommGroup V
inst✝⁸ : PseudoMetricSpace P
inst✝⁷ : NormedAddTorsor V P
inst✝⁶ : NormedAddCommGroup W
inst✝⁵ : MetricSpace Q
inst✝⁴ : NormedAddTorsor W Q
𝕜 : Type u_6
inst✝³ : NormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : Invertible 2
p₁ p₂ p₃ p₄ : P
⊢ ‖p₁ -ᵥ p₃ + (p₂ -ᵥ p₄)‖ / ‖2‖ ≤ (‖p₁ -ᵥ p₃‖ + ‖p₂ -ᵥ p₄‖) / ‖2‖

tactic: exact div_le_div_of_nonneg_right (norm_add_le _ _) (norm_nonneg _)
state_before: α : Type u_1
V : Type u_2
P : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁹ : SeminormedAddCommGroup V
inst✝⁸ : PseudoMetricSpace P
inst✝⁷ : NormedAddTorsor V P
inst✝⁶ : NormedAddCommGroup W
inst✝⁵ : MetricSpace Q
inst✝⁴ : NormedAddTorsor W Q
𝕜 : Type u_6
inst✝³ : NormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : Invertible 2
p₁ p₂ p₃ p₄ : P
⊢ ‖p₁ -ᵥ p₃ + (p₂ -ᵥ p₄)‖ / ‖2‖ ≤ (‖p₁ -ᵥ p₃‖ + ‖p₂ -ᵥ p₄‖) / ‖2‖
state_after: no goals
Theorem: SymplecticGroup.coe_inv'
File: Mathlib/LinearAlgebra/SymplecticGroup.lean

tactic: refine (coe_inv A).trans (inv_eq_left_inv ?_).symm
state_before: l : Type u_1
R : Type u_2
inst✝² : DecidableEq l
inst✝¹ : Fintype l
inst✝ : CommRing R
A✝ : Matrix (l ⊕ l) (l ⊕ l) R
A : ↥(symplecticGroup l R)
⊢ ↑A⁻¹ = (↑A)⁻¹
state_after: l : Type u_1
R : Type u_2
inst✝² : DecidableEq l
inst✝¹ : Fintype l
inst✝ : CommRing R
A✝ : Matrix (l ⊕ l) (l ⊕ l) R
A : ↥(symplecticGroup l R)
⊢ -J l R * (↑A)ᵀ * J l R * ↑A = 1

tactic: simp [inv_left_mul_aux, coe_inv]
state_before: l : Type u_1
R : Type u_2
inst✝² : DecidableEq l
inst✝¹ : Fintype l
inst✝ : CommRing R
A✝ : Matrix (l ⊕ l) (l ⊕ l) R
A : ↥(symplecticGroup l R)
⊢ -J l R * (↑A)ᵀ * J l R * ↑A = 1
state_after: no goals
Theorem: MvPolynomial.eval₂_map
File: Mathlib/Algebra/MvPolynomial/Basic.lean

tactic: rw [← eval_map, ← eval_map, map_map]
state_before: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝² : CommSemiring R
inst✝¹ : CommSemiring S₁
p✝ q : MvPolynomial σ R
f✝ : R →+* S₁
inst✝ : CommSemiring S₂
f : R →+* S₁
g : σ → S₂
φ : S₁ →+* S₂
p : MvPolynomial σ R
⊢ eval₂ φ g ((map f) p) = eval₂ (φ.comp f) g p
state_after: no goals