tasksource/leandojo huggingface dataset:
Theorem: CategoryTheory.Subobject.bot_factors_iff_zero
File: Mathlib/CategoryTheory/Subobject/Lattice.lean

tactic: rintro ⟨h, rfl⟩
state_before: C : Type u₁
inst✝³ : Category C
X Y Z : C
D : Type u₂
inst✝² : Category D
inst✝¹ : HasZeroObject C
inst✝ : HasZeroMorphisms C
A B : C
f : A ⟶ B
⊢ Factors ⊥ f → f = 0

tactic: simp only [MonoOver.bot_arrow_eq_zero, Functor.id_obj, Functor.const_obj_obj,
  MonoOver.bot_left, comp_zero]
state_before: case intro
C : Type u₁
inst✝³ : Category C
X Y Z : C
D : Type u₂
inst✝² : Category D
inst✝¹ : HasZeroObject C
inst✝ : HasZeroMorphisms C
A B : C
h : A ⟶ ⊥.obj.left
⊢ h ≫ MonoOver.arrow ⊥ = 0

tactic: rintro rfl
state_before: C : Type u₁
inst✝³ : Category C
X Y Z : C
D : Type u₂
inst✝² : Category D
inst✝¹ : HasZeroObject C
inst✝ : HasZeroMorphisms C
A B : C
f : A ⟶ B
⊢ f = 0 → Factors ⊥ f

tactic: exact ⟨0, by simp⟩
state_before: C : Type u₁
inst✝³ : Category C
X Y Z : C
D : Type u₂
inst✝² : Category D
inst✝¹ : HasZeroObject C
inst✝ : HasZeroMorphisms C
A B : C
⊢ Factors ⊥ 0

tactic: simp
state_before: C : Type u₁
inst✝³ : Category C
X Y Z : C
D : Type u₂
inst✝² : Category D
inst✝¹ : HasZeroObject C
inst✝ : HasZeroMorphisms C
A B : C
⊢ 0 ≫ MonoOver.arrow ⊥ = 0
Theorem: iSup_pair
File: Mathlib/Order/CompleteLattice.lean

tactic: rw [iSup_insert, iSup_singleton]
state_before: α : Type u_1
β : Type u_2
β₂ : Type ?u.141744
γ : Type ?u.141747
ι : Sort ?u.141750
ι' : Sort ?u.141753
κ : ι → Sort ?u.141758
κ' : ι' → Sort ?u.141763
inst✝ : CompleteLattice α
f✝ g s t : ι → α
a✝ b✝ : α
f : β → α
a b : β
⊢ (⨆ (x : β) (_ : x ∈ {a, b}), f x) = f a ⊔ f b
Theorem: ContinuousLinearEquiv.hasSum'
File: Mathlib/Topology/Algebra/InfiniteSum/Module.lean

tactic: rw [e.hasSum, ContinuousLinearEquiv.symm_apply_apply]
state_before: ι : Type u_5
R : Type u_1
R₂ : Type u_2
M : Type u_3
M₂ : Type u_4
inst✝⁹ : Semiring R
inst✝⁸ : Semiring R₂
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R₂ M₂
inst✝³ : TopologicalSpace M
inst✝² : TopologicalSpace M₂
σ : R →+* R₂
σ' : R₂ →+* R
inst✝¹ : RingHomInvPair σ σ'
inst✝ : RingHomInvPair σ' σ
f : ι → M
e : M ≃SL[σ] M₂
x : M
⊢ HasSum (fun b => ↑e (f b)) (↑e x) ↔ HasSum f x
Theorem: Lists'.of_toList
File: Mathlib/SetTheory/Lists.lean

tactic: rw [h]
state_before: α : Type u_1
b : Bool
h : true = b
l : Lists' α b
⊢ Lists' α true

tactic: exact l
state_before: α : Type u_1
b : Bool
h : true = b
l : Lists' α b
⊢ Lists' α b

tactic: induction l with
| atom => cases h
| nil => simp
| cons' b a _ IH =>
  intro l'
  simpa [cons] using IH rfl
state_before: α : Type u_1
b : Bool
h : true = b
l : Lists' α b
⊢ let l' := Eq.mpr (_ : Lists' α true = Lists' α b) l;
  ofList (toList l') = l'

tactic: cases h
state_before: case atom
α : Type u_1
b : Bool
a✝ : α
h : true = false
⊢ let l' := Eq.mpr (_ : Lists' α true = Lists' α false) (atom a✝);
  ofList (toList l') = l'

tactic: simp
state_before: case nil
α : Type u_1
b : Bool
h : true = true
⊢ let l' := Eq.mpr (_ : Lists' α true = Lists' α true) nil;
  ofList (toList l') = l'

tactic: intro l'
state_before: case cons'
α : Type u_1
b✝¹ b✝ : Bool
b : Lists' α b✝
a : Lists' α true
a_ih✝ :
  ∀ (h : true = b✝),
    let l' := Eq.mpr (_ : Lists' α true = Lists' α b✝) b;
    ofList (toList l') = l'
IH :
  ∀ (h : true = true),
    let l' := Eq.mpr (_ : Lists' α true = Lists' α true) a;
    ofList (toList l') = l'
h : true = true
⊢ let l' := Eq.mpr (_ : Lists' α true = Lists' α true) (cons' b a);
  ofList (toList l') = l'

tactic: simpa [cons] using IH rfl
state_before: case cons'
α : Type u_1
b✝¹ b✝ : Bool
b : Lists' α b✝
a : Lists' α true
a_ih✝ :
  ∀ (h : true = b✝),
    let l' := Eq.mpr (_ : Lists' α true = Lists' α b✝) b;
    ofList (toList l') = l'
IH :
  ∀ (h : true = true),
    let l' := Eq.mpr (_ : Lists' α true = Lists' α true) a;
    ofList (toList l') = l'
h : true = true
l' : Lists' α true := Eq.mpr (_ : Lists' α true = Lists' α true) (cons' b a)
⊢ ofList (toList l') = l'
Theorem: ConvexCone.blunt_iff_not_pointed
File: Mathlib/Analysis/Convex/Cone/Basic.lean

tactic: rw [pointed_iff_not_blunt, Classical.not_not]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type ?u.62541
G : Type ?u.62544
inst✝² : OrderedSemiring 𝕜
inst✝¹ : AddCommMonoid E
inst✝ : SMul 𝕜 E
S✝ S : ConvexCone 𝕜 E
⊢ Blunt S ↔ ¬Pointed S
Theorem: FirstOrder.Language.ElementaryEmbedding.map_fun
File: Mathlib/ModelTheory/ElementaryMaps.lean

tactic: have h := φ.map_formula (Formula.graph f) (Fin.cons (funMap f x) x)
state_before: L : Language
M : Type u_3
N : Type u_4
P : Type ?u.308452
Q : Type ?u.308455
inst✝³ : Structure L M
inst✝² : Structure L N
inst✝¹ : Structure L P
inst✝ : Structure L Q
φ : M ↪ₑ[L] N
n : ℕ
f : Functions L n
x : Fin n → M
⊢ ↑φ (funMap f x) = funMap f (↑φ ∘ x)

tactic: rw [Formula.realize_graph, Fin.comp_cons, Formula.realize_graph] at h
state_before: L : Language
M : Type u_3
N : Type u_4
P : Type ?u.308452
Q : Type ?u.308455
inst✝³ : Structure L M
inst✝² : Structure L N
inst✝¹ : Structure L P
inst✝ : Structure L Q
φ : M ↪ₑ[L] N
n : ℕ
f : Functions L n
x : Fin n → M
h :
  Formula.Realize (Formula.graph f) (↑φ ∘ Fin.cons (funMap f x) x) ↔
    Formula.Realize (Formula.graph f) (Fin.cons (funMap f x) x)
⊢ ↑φ (funMap f x) = funMap f (↑φ ∘ x)

tactic: rw [eq_comm, h]
state_before: L : Language
M : Type u_3
N : Type u_4
P : Type ?u.308452
Q : Type ?u.308455
inst✝³ : Structure L M
inst✝² : Structure L N
inst✝¹ : Structure L P
inst✝ : Structure L Q
φ : M ↪ₑ[L] N
n : ℕ
f : Functions L n
x : Fin n → M
h : funMap f (↑φ ∘ x) = ↑φ (funMap f x) ↔ funMap f x = funMap f x
⊢ ↑φ (funMap f x) = funMap f (↑φ ∘ x)
Theorem: MvPolynomial.polynomial_eval_eval₂
File: Mathlib/Data/MvPolynomial/Polynomial.lean

tactic: apply induction_on p
state_before: R : Type u_1
S : Type u_2
σ : Type u_3
x : S
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
f : R →+* Polynomial S
g : σ → Polynomial S
p : MvPolynomial σ R
⊢ Polynomial.eval x (eval₂ f g p) =
    eval₂ (RingHom.comp (Polynomial.evalRingHom x) f) (fun s => Polynomial.eval x (g s)) p

tactic: simp
state_before: case h_C
R : Type u_1
S : Type u_2
σ : Type u_3
x : S
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
f : R →+* Polynomial S
g : σ → Polynomial S
p : MvPolynomial σ R
⊢ ∀ (a : R),
    Polynomial.eval x (eval₂ f g (↑C a)) =
      eval₂ (RingHom.comp (Polynomial.evalRingHom x) f) (fun s => Polynomial.eval x (g s)) (↑C a)

tactic: intro p q hp hq
state_before: case h_add
R : Type u_1
S : Type u_2
σ : Type u_3
x : S
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
f : R →+* Polynomial S
g : σ → Polynomial S
p : MvPolynomial σ R
⊢ ∀ (p q : MvPolynomial σ R),
    Polynomial.eval x (eval₂ f g p) =
        eval₂ (RingHom.comp (Polynomial.evalRingHom x) f) (fun s => Polynomial.eval x (g s)) p →
      Polynomial.eval x (eval₂ f g q) =
          eval₂ (RingHom.comp (Polynomial.evalRingHom x) f) (fun s => Polynomial.eval x (g s)) q →
        Polynomial.eval x (eval₂ f g (p + q)) =
          eval₂ (RingHom.comp (Polynomial.evalRingHom x) f) (fun s => Polynomial.eval x (g s)) (p + q)

tactic: simp [hp, hq]
state_before: case h_add
R : Type u_1
S : Type u_2
σ : Type u_3
x : S
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
f : R →+* Polynomial S
g : σ → Polynomial S
p✝ p q : MvPolynomial σ R
hp :
  Polynomial.eval x (eval₂ f g p) =
    eval₂ (RingHom.comp (Polynomial.evalRingHom x) f) (fun s => Polynomial.eval x (g s)) p
hq :
  Polynomial.eval x (eval₂ f g q) =
    eval₂ (RingHom.comp (Polynomial.evalRingHom x) f) (fun s => Polynomial.eval x (g s)) q
⊢ Polynomial.eval x (eval₂ f g (p + q)) =
    eval₂ (RingHom.comp (Polynomial.evalRingHom x) f) (fun s => Polynomial.eval x (g s)) (p + q)

tactic: intro p n hp
state_before: case h_X
R : Type u_1
S : Type u_2
σ : Type u_3
x : S
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
f : R →+* Polynomial S
g : σ → Polynomial S
p : MvPolynomial σ R
⊢ ∀ (p : MvPolynomial σ R) (n : σ),
    Polynomial.eval x (eval₂ f g p) =
        eval₂ (RingHom.comp (Polynomial.evalRingHom x) f) (fun s => Polynomial.eval x (g s)) p →
      Polynomial.eval x (eval₂ f g (p * X n)) =
        eval₂ (RingHom.comp (Polynomial.evalRingHom x) f) (fun s => Polynomial.eval x (g s)) (p * X n)

tactic: simp [hp]
state_before: case h_X
R : Type u_1
S : Type u_2
σ : Type u_3
x : S
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
f : R →+* Polynomial S
g : σ → Polynomial S
p✝ p : MvPolynomial σ R
n : σ
hp :
  Polynomial.eval x (eval₂ f g p) =
    eval₂ (RingHom.comp (Polynomial.evalRingHom x) f) (fun s => Polynomial.eval x (g s)) p
⊢ Polynomial.eval x (eval₂ f g (p * X n)) =
    eval₂ (RingHom.comp (Polynomial.evalRingHom x) f) (fun s => Polynomial.eval x (g s)) (p * X n)
Theorem: ENNReal.half_lt_self
File: Mathlib/Data/Real/ENNReal.lean

tactic: lift a to ℝ≥0 using ht
state_before: α : Type ?u.326127
β : Type ?u.326130
a b c d : ℝ≥0∞
r p q : ℝ≥0
hz : a ≠ 0
ht : a ≠ ⊤
⊢ a / 2 < a

tactic: rw [coe_ne_zero] at hz
state_before: case intro
α : Type ?u.326127
β : Type ?u.326130
b c d : ℝ≥0∞
r p q a : ℝ≥0
hz : ↑a ≠ 0
⊢ ↑a / 2 < ↑a

tactic: rw [← coe_two, ← coe_div, coe_lt_coe]
state_before: case intro
α : Type ?u.326127
β : Type ?u.326130
b c d : ℝ≥0∞
r p q a : ℝ≥0
hz : a ≠ 0
⊢ ↑a / 2 < ↑a

tactic: exacts [NNReal.half_lt_self hz, two_ne_zero' _]
state_before: case intro
α : Type ?u.326127
β : Type ?u.326130
b c d : ℝ≥0∞
r p q a : ℝ≥0
hz : a ≠ 0
⊢ a / 2 < a

case intro
α : Type ?u.326127
β : Type ?u.326130
b c d : ℝ≥0∞
r p q a : ℝ≥0
hz : a ≠ 0
⊢ 2 ≠ 0
Theorem: LinearMap.polar_zero
File: Mathlib/Analysis/LocallyConvex/Polar.lean

tactic: refine' Set.eq_univ_iff_forall.mpr fun y x hx => _
state_before: 𝕜 : Type u_2
E : Type u_3
F : Type u_1
inst✝⁴ : NormedCommRing 𝕜
inst✝³ : AddCommMonoid E
inst✝² : AddCommMonoid F
inst✝¹ : Module 𝕜 E
inst✝ : Module 𝕜 F
B : E →ₗ[𝕜] F →ₗ[𝕜] 𝕜
⊢ polar B {0} = Set.univ

tactic: rw [Set.mem_singleton_iff.mp hx, map_zero, LinearMap.zero_apply, norm_zero]
state_before: 𝕜 : Type u_2
E : Type u_3
F : Type u_1
inst✝⁴ : NormedCommRing 𝕜
inst✝³ : AddCommMonoid E
inst✝² : AddCommMonoid F
inst✝¹ : Module 𝕜 E
inst✝ : Module 𝕜 F
B : E →ₗ[𝕜] F →ₗ[𝕜] 𝕜
y : F
x : E
hx : x ∈ {0}
⊢ ‖↑(↑B x) y‖ ≤ 1

tactic: exact zero_le_one
state_before: 𝕜 : Type u_2
E : Type u_3
F : Type u_1
inst✝⁴ : NormedCommRing 𝕜
inst✝³ : AddCommMonoid E
inst✝² : AddCommMonoid F
inst✝¹ : Module 𝕜 E
inst✝ : Module 𝕜 F
B : E →ₗ[𝕜] F →ₗ[𝕜] 𝕜
y : F
x : E
hx : x ∈ {0}
⊢ 0 ≤ 1
Theorem: Matrix.dotProduct_sub
File: Mathlib/Data/Matrix/Basic.lean

tactic: simp [sub_eq_add_neg]
state_before: l : Type ?u.181483
m : Type u_1
n : Type ?u.181489
o : Type ?u.181492
m' : o → Type ?u.181497
n' : o → Type ?u.181502
R : Type ?u.181505
S : Type ?u.181508
α : Type v
β : Type w
γ : Type ?u.181515
inst✝² : Fintype m
inst✝¹ : Fintype n
inst✝ : NonUnitalNonAssocRing α
u v w : m → α
⊢ u ⬝ᵥ (v - w) = u ⬝ᵥ v - u ⬝ᵥ w
Theorem: symmDiff_symmDiff_right
File: Mathlib/Order/SymmDiff.lean

tactic: ac_rfl
state_before: ι : Type ?u.69972
α : Type u_1
β : Type ?u.69978
π : ι → Type ?u.69983
inst✝ : GeneralizedBooleanAlgebra α
a b c d : α
⊢ a \ (b ⊔ c) ⊔ a ⊓ b ⊓ c ⊔ (b \ (c ⊔ a) ⊔ c \ (b ⊔ a)) = a \ (b ⊔ c) ⊔ b \ (a ⊔ c) ⊔ c \ (a ⊔ b) ⊔ a ⊓ b ⊓ c
Theorem: AffineMap.lineMap_same_apply
File: Mathlib/LinearAlgebra/AffineSpace/AffineMap.lean

tactic: letI : AddAction V1 P1 := inferInstance
state_before: k : Type u_2
V1 : Type u_3
P1 : Type u_1
V2 : Type ?u.434982
P2 : Type ?u.434985
V3 : Type ?u.434988
P3 : Type ?u.434991
V4 : Type ?u.434994
P4 : Type ?u.434997
inst✝¹² : Ring k
inst✝¹¹ : AddCommGroup V1
inst✝¹⁰ : Module k V1
inst✝⁹ : AffineSpace V1 P1
inst✝⁸ : AddCommGroup V2
inst✝⁷ : Module k V2
inst✝⁶ : AffineSpace V2 P2
inst✝⁵ : AddCommGroup V3
inst✝⁴ : Module k V3
inst✝³ : AffineSpace V3 P3
inst✝² : AddCommGroup V4
inst✝¹ : Module k V4
inst✝ : AffineSpace V4 P4
p : P1
c : k
⊢ ↑(lineMap p p) c = p

tactic: simp [(lineMap_apply), (vsub_self)]
state_before: k : Type u_2
V1 : Type u_3
P1 : Type u_1
V2 : Type ?u.434982
P2 : Type ?u.434985
V3 : Type ?u.434988
P3 : Type ?u.434991
V4 : Type ?u.434994
P4 : Type ?u.434997
inst✝¹² : Ring k
inst✝¹¹ : AddCommGroup V1
inst✝¹⁰ : Module k V1
inst✝⁹ : AffineSpace V1 P1
inst✝⁸ : AddCommGroup V2
inst✝⁷ : Module k V2
inst✝⁶ : AffineSpace V2 P2
inst✝⁵ : AddCommGroup V3
inst✝⁴ : Module k V3
inst✝³ : AffineSpace V3 P3
inst✝² : AddCommGroup V4
inst✝¹ : Module k V4
inst✝ : AffineSpace V4 P4
p : P1
c : k
this : AddAction V1 P1 := inferInstance
⊢ ↑(lineMap p p) c = p
Theorem: MeasureTheory.union_ae_eq_univ_of_ae_eq_univ_left
File: Mathlib/MeasureTheory/Measure/MeasureSpaceDef.lean

tactic: convert ae_eq_set_union h (ae_eq_refl t)
state_before: α : Type u_1
β : Type ?u.112649
γ : Type ?u.112652
δ : Type ?u.112655
ι : Type ?u.112658
inst✝ : MeasurableSpace α
μ μ₁ μ₂ : Measure α
s s₁ s₂ t : Set α
h : s =ᵐ[μ] univ
⊢ s ∪ t =ᵐ[μ] univ

tactic: rw [univ_union]
state_before: case h.e'_5
α : Type u_1
β : Type ?u.112649
γ : Type ?u.112652
δ : Type ?u.112655
ι : Type ?u.112658
inst✝ : MeasurableSpace α
μ μ₁ μ₂ : Measure α
s s₁ s₂ t : Set α
h : s =ᵐ[μ] univ
⊢ univ = univ ∪ t
Theorem: Ordinal.one_add_of_omega_le
File: Mathlib/SetTheory/Ordinal/Arithmetic.lean

tactic: rw [← Ordinal.add_sub_cancel_of_le h, ← add_assoc, one_add_omega]
state_before: α : Type ?u.135821
β : Type ?u.135824
γ : Type ?u.135827
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
o : Ordinal
h : ω ≤ o
⊢ 1 + o = o
Theorem: Function.Semiconj.mapsTo_preimage
File: Mathlib/Data/Set/Function.lean

tactic: simp only [mem_preimage, h x, hb hx]
state_before: α : Type u_1
β : Type u_2
γ : Type ?u.113229
ι : Sort ?u.113232
π : α → Type ?u.113237
fa : α → α
fb : β → β
f : α → β
g : β → γ
s✝ t✝ : Set α
h : Semiconj f fa fb
s t : Set β
hb : MapsTo fb s t
x : α
hx : x ∈ f ⁻¹' s
⊢ fa x ∈ f ⁻¹' t
Theorem: EuclideanGeometry.dist_div_sin_angle_of_angle_eq_pi_div_two
File: Mathlib/Geometry/Euclidean/Angle/Unoriented/RightAngle.lean

tactic: rw [angle, ← inner_eq_zero_iff_angle_eq_pi_div_two, real_inner_comm, ← neg_eq_zero, ←
  inner_neg_left, neg_vsub_eq_vsub_rev] at h
state_before: V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p₁ p₂ p₃ : P
h : ∠ p₁ p₂ p₃ = π / 2
h0 : p₁ ≠ p₂ ∨ p₃ = p₂
⊢ dist p₁ p₂ / Real.sin (∠ p₂ p₃ p₁) = dist p₁ p₃

tactic: rw [eq_comm, ← @vsub_ne_zero V, ← @vsub_eq_zero_iff_eq V, or_comm] at h0
state_before: V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p₁ p₂ p₃ : P
h : inner (p₂ -ᵥ p₃) (p₁ -ᵥ p₂) = 0
h0 : p₁ ≠ p₂ ∨ p₃ = p₂
⊢ dist p₁ p₂ / Real.sin (∠ p₂ p₃ p₁) = dist p₁ p₃

tactic: rw [angle, dist_eq_norm_vsub V p₁ p₂, dist_eq_norm_vsub V p₁ p₃, ← vsub_add_vsub_cancel p₁ p₂ p₃,
  add_comm, norm_div_sin_angle_add_of_inner_eq_zero h h0]
state_before: V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p₁ p₂ p₃ : P
h : inner (p₂ -ᵥ p₃) (p₁ -ᵥ p₂) = 0
h0 : p₂ -ᵥ p₃ = 0 ∨ p₁ -ᵥ p₂ ≠ 0
⊢ dist p₁ p₂ / Real.sin (∠ p₂ p₃ p₁) = dist p₁ p₃
Theorem: lt_iff_exists_mul
File: Mathlib/Algebra/Order/Monoid/Canonical/Defs.lean

tactic: rw [lt_iff_le_and_ne, le_iff_exists_mul, ←exists_and_right]
state_before: α : Type u
inst✝¹ : CanonicallyOrderedMonoid α
a b c d : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
⊢ a < b ↔ ∃ c, c > 1 ∧ b = a * c

tactic: apply exists_congr
state_before: α : Type u
inst✝¹ : CanonicallyOrderedMonoid α
a b c d : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
⊢ (∃ x, b = a * x ∧ a ≠ b) ↔ ∃ c, c > 1 ∧ b = a * c

tactic: intro c
state_before: case h
α : Type u
inst✝¹ : CanonicallyOrderedMonoid α
a b c d : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
⊢ ∀ (a_1 : α), b = a * a_1 ∧ a ≠ b ↔ a_1 > 1 ∧ b = a * a_1

tactic: rw [and_comm, and_congr_left_iff, gt_iff_lt]
state_before: case h
α : Type u
inst✝¹ : CanonicallyOrderedMonoid α
a b c✝ d : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
c : α
⊢ b = a * c ∧ a ≠ b ↔ c > 1 ∧ b = a * c

tactic: rintro rfl
state_before: case h
α : Type u
inst✝¹ : CanonicallyOrderedMonoid α
a b c✝ d : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
c : α
⊢ b = a * c → (a ≠ b ↔ 1 < c)

tactic: constructor
state_before: case h
α : Type u
inst✝¹ : CanonicallyOrderedMonoid α
a c✝ d : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
c : α
⊢ a ≠ a * c ↔ 1 < c

tactic: rw [one_lt_iff_ne_one]
state_before: case h.mp
α : Type u
inst✝¹ : CanonicallyOrderedMonoid α
a c✝ d : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
c : α
⊢ a ≠ a * c → 1 < c

tactic: apply mt
state_before: case h.mp
α : Type u
inst✝¹ : CanonicallyOrderedMonoid α
a c✝ d : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
c : α
⊢ a ≠ a * c → c ≠ 1

tactic: rintro rfl
state_before: case h.mp.h₁
α : Type u
inst✝¹ : CanonicallyOrderedMonoid α
a c✝ d : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
c : α
⊢ c = 1 → a = a * c

tactic: rw [mul_one]
state_before: case h.mp.h₁
α : Type u
inst✝¹ : CanonicallyOrderedMonoid α
a c d : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
⊢ a = a * 1

tactic: rw [← (self_le_mul_right a c).lt_iff_ne]
state_before: case h.mpr
α : Type u
inst✝¹ : CanonicallyOrderedMonoid α
a c✝ d : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
c : α
⊢ 1 < c → a ≠ a * c

tactic: apply lt_mul_of_one_lt_right'
state_before: case h.mpr
α : Type u
inst✝¹ : CanonicallyOrderedMonoid α
a c✝ d : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
c : α
⊢ 1 < c → a < a * c
Theorem: List.chain'_append_cons_cons
File: Mathlib/Data/List/Chain.lean

tactic: rw [chain'_split, chain'_cons]
state_before: α : Type u
β : Type v
R r : α → α → Prop
l l₁✝ l₂✝ : List α
a b✝ b c : α
l₁ l₂ : List α
⊢ Chain' R (l₁ ++ b :: c :: l₂) ↔ Chain' R (l₁ ++ [b]) ∧ R b c ∧ Chain' R (c :: l₂)
Theorem: deriv_mem_iff
File: Mathlib/Analysis/Calculus/Deriv/Basic.lean

tactic: by_cases hx : DifferentiableAt 𝕜 f x <;> simp [deriv_zero_of_not_differentiableAt, *]
state_before: 𝕜 : Type u
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type v
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type w
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f✝ f₀ f₁ g : 𝕜 → F
f' f₀' f₁' g' : F
x✝ : 𝕜
s✝ t : Set 𝕜
L L₁ L₂ : Filter 𝕜
f : 𝕜 → F
s : Set F
x : 𝕜
⊢ deriv f x ∈ s ↔ DifferentiableAt 𝕜 f x ∧ deriv f x ∈ s ∨ ¬DifferentiableAt 𝕜 f x ∧ 0 ∈ s
Theorem: TypeVec.subtypeVal_diagSub
File: Mathlib/Data/TypeVec.lean

tactic: ext i x
state_before: n : ℕ
α : TypeVec n
⊢ subtypeVal (repeatEq α) ⊚ diagSub = prod.diag

tactic: induction' i with _ _ _ i_ih
state_before: case a.h
n : ℕ
α : TypeVec n
i : Fin2 n
x : α i
⊢ (subtypeVal (repeatEq α) ⊚ diagSub) i x = prod.diag i x

tactic: . simp [comp, diagSub, subtypeVal, prod.diag]
state_before: case a.h.fz
n : ℕ
α✝ : TypeVec n
i : Fin2 n
x✝ : α✝ i
n✝ : ℕ
α : TypeVec (Nat.succ n✝)
x : α Fin2.fz
⊢ (subtypeVal (repeatEq α) ⊚ diagSub) Fin2.fz x = prod.diag Fin2.fz x

case a.h.fs
n : ℕ
α✝ : TypeVec n
i : Fin2 n
x✝ : α✝ i
n✝ : ℕ
a✝ : Fin2 n✝
i_ih : ∀ {α : TypeVec n✝} (x : α a✝), (subtypeVal (repeatEq α) ⊚ diagSub) a✝ x = prod.diag a✝ x
α : TypeVec (Nat.succ n✝)
x : α (Fin2.fs a✝)
⊢ (subtypeVal (repeatEq α) ⊚ diagSub) (Fin2.fs a✝) x = prod.diag (Fin2.fs a✝) x

tactic: . simp [prod.diag]
  simp [comp, diagSub, subtypeVal, prod.diag] at *
  apply @i_ih (drop _)
state_before: case a.h.fs
n : ℕ
α✝ : TypeVec n
i : Fin2 n
x✝ : α✝ i
n✝ : ℕ
a✝ : Fin2 n✝
i_ih : ∀ {α : TypeVec n✝} (x : α a✝), (subtypeVal (repeatEq α) ⊚ diagSub) a✝ x = prod.diag a✝ x
α : TypeVec (Nat.succ n✝)
x : α (Fin2.fs a✝)
⊢ (subtypeVal (repeatEq α) ⊚ diagSub) (Fin2.fs a✝) x = prod.diag (Fin2.fs a✝) x

tactic: simp [comp, diagSub, subtypeVal, prod.diag]
state_before: case a.h.fz
n : ℕ
α✝ : TypeVec n
i : Fin2 n
x✝ : α✝ i
n✝ : ℕ
α : TypeVec (Nat.succ n✝)
x : α Fin2.fz
⊢ (subtypeVal (repeatEq α) ⊚ diagSub) Fin2.fz x = prod.diag Fin2.fz x

tactic: simp [prod.diag]
state_before: case a.h.fs
n : ℕ
α✝ : TypeVec n
i : Fin2 n
x✝ : α✝ i
n✝ : ℕ
a✝ : Fin2 n✝
i_ih : ∀ {α : TypeVec n✝} (x : α a✝), (subtypeVal (repeatEq α) ⊚ diagSub) a✝ x = prod.diag a✝ x
α : TypeVec (Nat.succ n✝)
x : α (Fin2.fs a✝)
⊢ (subtypeVal (repeatEq α) ⊚ diagSub) (Fin2.fs a✝) x = prod.diag (Fin2.fs a✝) x

tactic: simp [comp, diagSub, subtypeVal, prod.diag] at *
state_before: case a.h.fs
n : ℕ
α✝ : TypeVec n
i : Fin2 n
x✝ : α✝ i
n✝ : ℕ
a✝ : Fin2 n✝
i_ih : ∀ {α : TypeVec n✝} (x : α a✝), (subtypeVal (repeatEq α) ⊚ diagSub) a✝ x = prod.diag a✝ x
α : TypeVec (Nat.succ n✝)
x : α (Fin2.fs a✝)
⊢ (subtypeVal (repeatEq α) ⊚ diagSub) (Fin2.fs a✝) x = prod.diag a✝ x

tactic: apply @i_ih (drop _)
state_before: case a.h.fs
n : ℕ
α✝ : TypeVec n
i : Fin2 n
x✝ : α✝ i
n✝ : ℕ
a✝ : Fin2 n✝
i_ih : ∀ {α : TypeVec n✝} (x : α a✝), subtypeVal (repeatEq α) a✝ (diagSub a✝ x) = prod.diag a✝ x
α : TypeVec (Nat.succ n✝)
x : α (Fin2.fs a✝)
⊢ subtypeVal (dropFun (repeatEq α)) a✝ (diagSub a✝ x) = prod.diag a✝ x
Theorem: ENat.succ_def
File: Mathlib/Data/ENat/Basic.lean

tactic: cases m <;> rfl
state_before: m✝ n m : ℕ∞
⊢ Order.succ m = m + 1
Theorem: HomologicalComplex.singleMapHomologicalComplex_hom_app_ne
File: Mathlib/Algebra/Homology/Additive.lean

tactic: simp [singleMapHomologicalComplex, h]
state_before: ι : Type u_1
V : Type u
inst✝⁶ : Category V
inst✝⁵ : Preadditive V
c : ComplexShape ι
C D E : HomologicalComplex V c
f g : C ⟶ D
h✝ k : D ⟶ E
i✝ : ι
inst✝⁴ : HasZeroObject V
W : Type u_3
inst✝³ : Category W
inst✝² : Preadditive W
inst✝¹ : HasZeroObject W
F : V ⥤ W
inst✝ : Functor.Additive F
i j : ι
h : i ≠ j
X : V
⊢ Hom.f ((singleMapHomologicalComplex F c j).hom.app X) i = 0
Theorem: Set.einfsep_ne_top
File: Mathlib/Topology/MetricSpace/Infsep.lean

tactic: simp_rw [← lt_top_iff_ne_top, einfsep_lt_top]
state_before: α : Type u_1
β : Type ?u.10722
inst✝ : EDist α
x y : α
s t : Set α
⊢ einfsep s ≠ ⊤ ↔ ∃ x x_1 y x_2 _hxy, edist x y ≠ ⊤