1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: CategoryTheory.IsKernelPair.isIso_of_mono
File: Mathlib/CategoryTheory/Limits/Shapes/KernelPair.lean

tactic: rw [←
  show _ = a from
    (Category.comp_id _).symm.trans
      ((IsKernelPair.id_of_mono f).isLimit.conePointUniqueUpToIso_inv_comp h.isLimit
        WalkingCospan.left)]
state_before: C : Type u
inst✝¹ : Category.{v, u} C
R X Y Z : C
f : X ⟶ Y
a b : R ⟶ X
h : IsKernelPair f a b
inst✝ : Mono f
⊢ IsIso a
state_after: C : Type u
inst✝¹ : Category.{v, u} C
R X Y Z : C
f : X ⟶ Y
a b : R ⟶ X
h : IsKernelPair f a b
inst✝ : Mono f
⊢ IsIso ((IsPullback.isLimit ⋯).conePointUniqueUpToIso (IsPullback.isLimit h)).inv

tactic: infer_instance
state_before: C : Type u
inst✝¹ : Category.{v, u} C
R X Y Z : C
f : X ⟶ Y
a b : R ⟶ X
h : IsKernelPair f a b
inst✝ : Mono f
⊢ IsIso ((IsPullback.isLimit ⋯).conePointUniqueUpToIso (IsPullback.isLimit h)).inv
state_after: no goals
Theorem: TensorProduct.ext_threefold
File: Mathlib/LinearAlgebra/TensorProduct/Basic.lean

tactic: ext x y z
state_before: R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
T : Type u_9
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : AddCommMonoid T
inst✝⁷ : Module R M
inst✝⁶ : Module R N
inst✝⁵ : Module R P
inst✝⁴ : Module R Q
inst✝³ : Module R S
inst✝² : Module R T
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M →ₗ[R] N →ₗ[R] P
g h : (M ⊗[R] N) ⊗[R] P →ₗ[R] Q
H : ∀ (x : M) (y : N) (z : P), g ((x ⊗ₜ[R] y) ⊗ₜ[R] z) = h ((x ⊗ₜ[R] y) ⊗ₜ[R] z)
⊢ g = h
state_after: case H.H.h.h.h
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
T : Type u_9
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : AddCommMonoid T
inst✝⁷ : Module R M
inst✝⁶ : Module R N
inst✝⁵ : Module R P
inst✝⁴ : Module R Q
inst✝³ : Module R S
inst✝² : Module R T
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M →ₗ[R] N →ₗ[R] P
g h : (M ⊗[R] N) ⊗[R] P →ₗ[R] Q
H : ∀ (x : M) (y : N) (z : P), g ((x ⊗ₜ[R] y) ⊗ₜ[R] z) = h ((x ⊗ₜ[R] y) ⊗ₜ[R] z)
x : M
y : N
z : P
⊢ ((((mk R M N).compr₂ ((mk R (M ⊗[R] N) P).compr₂ g)) x) y) z =
    ((((mk R M N).compr₂ ((mk R (M ⊗[R] N) P).compr₂ h)) x) y) z

tactic: exact H x y z
state_before: case H.H.h.h.h
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
T : Type u_9
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : AddCommMonoid T
inst✝⁷ : Module R M
inst✝⁶ : Module R N
inst✝⁵ : Module R P
inst✝⁴ : Module R Q
inst✝³ : Module R S
inst✝² : Module R T
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M →ₗ[R] N →ₗ[R] P
g h : (M ⊗[R] N) ⊗[R] P →ₗ[R] Q
H : ∀ (x : M) (y : N) (z : P), g ((x ⊗ₜ[R] y) ⊗ₜ[R] z) = h ((x ⊗ₜ[R] y) ⊗ₜ[R] z)
x : M
y : N
z : P
⊢ ((((mk R M N).compr₂ ((mk R (M ⊗[R] N) P).compr₂ g)) x) y) z =
    ((((mk R M N).compr₂ ((mk R (M ⊗[R] N) P).compr₂ h)) x) y) z
state_after: no goals
Theorem: Path.Homotopy.hcomp_apply
File: Mathlib/Topology/Homotopy/Path.lean

tactic: split_ifs <;> exact Path.extend_extends _ _
state_before: X : Type u
Y : Type v
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x₀ x₁ x₂ x₃ : X
p₀ q₀ : Path x₀ x₁
p₁ q₁ : Path x₁ x₂
F : p₀.Homotopy q₀
G : p₁.Homotopy q₁
x : ↑I × ↑I
⊢ (if ↑x.2 ≤ 1 / 2 then (F.eval x.1).extend (2 * ↑x.2) else (G.eval x.1).extend (2 * ↑x.2 - 1)) =
    if h : ↑x.2 ≤ 1 / 2 then (F.eval x.1) ⟨2 * ↑x.2, ⋯⟩ else (G.eval x.1) ⟨2 * ↑x.2 - 1, ⋯⟩
state_after: no goals
Theorem: ContinuousMap.toNNReal_algebraMap
File: Mathlib/Topology/ContinuousFunction/UniqueCFC.lean

tactic: ext
state_before: X : Type u_1
inst✝ : TopologicalSpace X
r : ℝ≥0
⊢ ((algebraMap ℝ C(X, ℝ)) ↑r).toNNReal = (algebraMap ℝ≥0 C(X, ℝ≥0)) r
state_after: case h.a
X : Type u_1
inst✝ : TopologicalSpace X
r : ℝ≥0
a✝ : X
⊢ ↑(((algebraMap ℝ C(X, ℝ)) ↑r).toNNReal a✝) = ↑(((algebraMap ℝ≥0 C(X, ℝ≥0)) r) a✝)

tactic: simp
state_before: case h.a
X : Type u_1
inst✝ : TopologicalSpace X
r : ℝ≥0
a✝ : X
⊢ ↑(((algebraMap ℝ C(X, ℝ)) ↑r).toNNReal a✝) = ↑(((algebraMap ℝ≥0 C(X, ℝ≥0)) r) a✝)
state_after: no goals
Theorem: Embedding.isTotallyDisconnected_image
File: Mathlib/Topology/Connected/TotallyDisconnected.lean

tactic: refine ⟨hf.isTotallyDisconnected, fun hs u hus hu ↦ ?_⟩
state_before: α : Type u
β : Type v
ι : Type u_1
π : ι → Type u_2
inst✝¹ : TopologicalSpace α
s✝ t u v : Set α
inst✝ : TopologicalSpace β
f : α → β
hf : _root_.Embedding f
s : Set α
⊢ IsTotallyDisconnected (f '' s) ↔ IsTotallyDisconnected s
state_after: α : Type u
β : Type v
ι : Type u_1
π : ι → Type u_2
inst✝¹ : TopologicalSpace α
s✝ t u✝ v : Set α
inst✝ : TopologicalSpace β
f : α → β
hf : _root_.Embedding f
s : Set α
hs : IsTotallyDisconnected s
u : Set β
hus : u ⊆ f '' s
hu : IsPreconnected u
⊢ u.Subsingleton

tactic: obtain ⟨v, hvs, rfl⟩ : ∃ v, v ⊆ s ∧ f '' v = u :=
  ⟨f ⁻¹' u ∩ s, inter_subset_right, by rwa [image_preimage_inter, inter_eq_left]⟩
state_before: α : Type u
β : Type v
ι : Type u_1
π : ι → Type u_2
inst✝¹ : TopologicalSpace α
s✝ t u✝ v : Set α
inst✝ : TopologicalSpace β
f : α → β
hf : _root_.Embedding f
s : Set α
hs : IsTotallyDisconnected s
u : Set β
hus : u ⊆ f '' s
hu : IsPreconnected u
⊢ u.Subsingleton
state_after: case intro.intro
α : Type u
β : Type v
ι : Type u_1
π : ι → Type u_2
inst✝¹ : TopologicalSpace α
s✝ t u v✝ : Set α
inst✝ : TopologicalSpace β
f : α → β
hf : _root_.Embedding f
s : Set α
hs : IsTotallyDisconnected s
v : Set α
hvs : v ⊆ s
hus : f '' v ⊆ f '' s
hu : IsPreconnected (f '' v)
⊢ (f '' v).Subsingleton

tactic: rw [hf.toInducing.isPreconnected_image] at hu
state_before: case intro.intro
α : Type u
β : Type v
ι : Type u_1
π : ι → Type u_2
inst✝¹ : TopologicalSpace α
s✝ t u v✝ : Set α
inst✝ : TopologicalSpace β
f : α → β
hf : _root_.Embedding f
s : Set α
hs : IsTotallyDisconnected s
v : Set α
hvs : v ⊆ s
hus : f '' v ⊆ f '' s
hu : IsPreconnected (f '' v)
⊢ (f '' v).Subsingleton
state_after: case intro.intro
α : Type u
β : Type v
ι : Type u_1
π : ι → Type u_2
inst✝¹ : TopologicalSpace α
s✝ t u v✝ : Set α
inst✝ : TopologicalSpace β
f : α → β
hf : _root_.Embedding f
s : Set α
hs : IsTotallyDisconnected s
v : Set α
hvs : v ⊆ s
hus : f '' v ⊆ f '' s
hu : IsPreconnected v
⊢ (f '' v).Subsingleton

tactic: exact (hs v hvs hu).image _
state_before: case intro.intro
α : Type u
β : Type v
ι : Type u_1
π : ι → Type u_2
inst✝¹ : TopologicalSpace α
s✝ t u v✝ : Set α
inst✝ : TopologicalSpace β
f : α → β
hf : _root_.Embedding f
s : Set α
hs : IsTotallyDisconnected s
v : Set α
hvs : v ⊆ s
hus : f '' v ⊆ f '' s
hu : IsPreconnected v
⊢ (f '' v).Subsingleton
state_after: no goals

tactic: rwa [image_preimage_inter, inter_eq_left]
state_before: α : Type u
β : Type v
ι : Type u_1
π : ι → Type u_2
inst✝¹ : TopologicalSpace α
s✝ t u✝ v : Set α
inst✝ : TopologicalSpace β
f : α → β
hf : _root_.Embedding f
s : Set α
hs : IsTotallyDisconnected s
u : Set β
hus : u ⊆ f '' s
hu : IsPreconnected u
⊢ f '' (f ⁻¹' u ∩ s) = u
state_after: no goals
Theorem: Batteries.AssocList.toList_mapKey
File: .lake/packages/batteries/Batteries/Data/AssocList.lean

tactic: induction l <;> simp [*]
state_before: α : Type u_1
δ : Type u_2
β : Type u_3
f : α → δ
l : AssocList α β
⊢ (mapKey f l).toList =
    List.map
      (fun x =>
        match x with
        | (a, b) => (f a, b))
      l.toList
state_after: no goals
Theorem: List.Chain.count_not
File: Mathlib/Data/Bool/Count.lean

tactic: obtain rfl : b = !x := Bool.eq_not_iff.2 (rel_of_chain_cons h)
state_before: b x : Bool
l : List Bool
h : Chain (fun x x_1 => x ≠ x_1) b (x :: l)
⊢ count (!b) (x :: l) = count b (x :: l) + (x :: l).length % 2
state_after: x : Bool
l : List Bool
h : Chain (fun x x_1 => x ≠ x_1) (!x) (x :: l)
⊢ count (!!x) (x :: l) = count (!x) (x :: l) + (x :: l).length % 2

tactic: rw [Bool.not_not, count_cons_self, count_cons_of_ne x.not_ne_self,
  Chain.count_not (chain_of_chain_cons h), length, add_assoc, Nat.mod_two_add_succ_mod_two]
state_before: x : Bool
l : List Bool
h : Chain (fun x x_1 => x ≠ x_1) (!x) (x :: l)
⊢ count (!!x) (x :: l) = count (!x) (x :: l) + (x :: l).length % 2
state_after: no goals
Theorem: Real.cos_pi
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Basic.lean

tactic: rw [← mul_div_cancel_left₀ π (two_ne_zero' ℝ), mul_div_assoc, cos_two_mul, cos_pi_div_two]
state_before: ⊢ cos π = -1
state_after: ⊢ 2 * 0 ^ 2 - 1 = -1

tactic: norm_num
state_before: ⊢ 2 * 0 ^ 2 - 1 = -1
state_after: no goals
Theorem: LieModule.mem_posFittingCompOf
File: Mathlib/Algebra/Lie/Weights/Basic.lean

tactic: simp [posFittingCompOf]
state_before: K : Type u_1
R : Type u_2
L : Type u_3
M : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : LieRing L
inst✝⁵ : LieAlgebra R L
inst✝⁴ : LieAlgebra.IsNilpotent R L
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : LieRingModule L M
inst✝ : LieModule R L M
x : L
m : M
⊢ m ∈ posFittingCompOf R M x ↔ ∀ (k : ℕ), ∃ n, ((toEnd R L M) x ^ k) n = m
state_after: no goals
Theorem: Polynomial.roots_ne_zero_of_splits'
File: Mathlib/Algebra/Polynomial/Splits.lean

tactic: rw [← eval_map] at hx
state_before: R : Type u_1
F : Type u
K : Type v
L : Type w
inst✝² : CommRing K
inst✝¹ : Field L
inst✝ : Field F
i : K →+* L
f : K[X]
hs : Splits i f
hf0 : (map i f).natDegree ≠ 0
x : L
hx : eval₂ i x f = 0
h : (map i f).roots = 0
⊢ False
state_after: R : Type u_1
F : Type u
K : Type v
L : Type w
inst✝² : CommRing K
inst✝¹ : Field L
inst✝ : Field F
i : K →+* L
f : K[X]
hs : Splits i f
hf0 : (map i f).natDegree ≠ 0
x : L
hx : eval x (map i f) = 0
h : (map i f).roots = 0
⊢ False

tactic: have : f.map i ≠ 0 := by intro; simp_all
state_before: R : Type u_1
F : Type u
K : Type v
L : Type w
inst✝² : CommRing K
inst✝¹ : Field L
inst✝ : Field F
i : K →+* L
f : K[X]
hs : Splits i f
hf0 : (map i f).natDegree ≠ 0
x : L
hx : eval x (map i f) = 0
h : (map i f).roots = 0
⊢ False
state_after: R : Type u_1
F : Type u
K : Type v
L : Type w
inst✝² : CommRing K
inst✝¹ : Field L
inst✝ : Field F
i : K →+* L
f : K[X]
hs : Splits i f
hf0 : (map i f).natDegree ≠ 0
x : L
hx : eval x (map i f) = 0
h : (map i f).roots = 0
this : map i f ≠ 0
⊢ False

tactic: cases h.subst ((mem_roots this).2 hx)
state_before: R : Type u_1
F : Type u
K : Type v
L : Type w
inst✝² : CommRing K
inst✝¹ : Field L
inst✝ : Field F
i : K →+* L
f : K[X]
hs : Splits i f
hf0 : (map i f).natDegree ≠ 0
x : L
hx : eval x (map i f) = 0
h : (map i f).roots = 0
this : map i f ≠ 0
⊢ False
state_after: no goals

tactic: intro
state_before: R : Type u_1
F : Type u
K : Type v
L : Type w
inst✝² : CommRing K
inst✝¹ : Field L
inst✝ : Field F
i : K →+* L
f : K[X]
hs : Splits i f
hf0 : (map i f).natDegree ≠ 0
x : L
hx : eval x (map i f) = 0
h : (map i f).roots = 0
⊢ map i f ≠ 0
state_after: R : Type u_1
F : Type u
K : Type v
L : Type w
inst✝² : CommRing K
inst✝¹ : Field L
inst✝ : Field F
i : K →+* L
f : K[X]
hs : Splits i f
hf0 : (map i f).natDegree ≠ 0
x : L
hx : eval x (map i f) = 0
h : (map i f).roots = 0
a✝ : map i f = 0
⊢ False

tactic: simp_all
state_before: R : Type u_1
F : Type u
K : Type v
L : Type w
inst✝² : CommRing K
inst✝¹ : Field L
inst✝ : Field F
i : K →+* L
f : K[X]
hs : Splits i f
hf0 : (map i f).natDegree ≠ 0
x : L
hx : eval x (map i f) = 0
h : (map i f).roots = 0
a✝ : map i f = 0
⊢ False
state_after: no goals
Theorem: Int.fract_add_nat
File: Mathlib/Algebra/Order/Floor.lean

tactic: rw [fract]
state_before: F : Type u_1
α : Type u_2
β : Type u_3
inst✝¹ : LinearOrderedRing α
inst✝ : FloorRing α
z : ℤ
a✝ a : α
m : ℕ
⊢ fract (a + ↑m) = fract a
state_after: F : Type u_1
α : Type u_2
β : Type u_3
inst✝¹ : LinearOrderedRing α
inst✝ : FloorRing α
z : ℤ
a✝ a : α
m : ℕ
⊢ a + ↑m - ↑⌊a + ↑m⌋ = fract a

tactic: simp
state_before: F : Type u_1
α : Type u_2
β : Type u_3
inst✝¹ : LinearOrderedRing α
inst✝ : FloorRing α
z : ℤ
a✝ a : α
m : ℕ
⊢ a + ↑m - ↑⌊a + ↑m⌋ = fract a
state_after: no goals
Theorem: PiLp.basis_toMatrix_basisFun_mul
File: Mathlib/Analysis/NormedSpace/PiLp.lean

tactic: have := basis_toMatrix_basisFun_mul (b.map (WithLp.linearEquiv _ 𝕜 _)) A
state_before: p : ℝ≥0∞
𝕜✝ : Type u_1
ι : Type u_2
α : ι → Type u_3
β : ι → Type u_4
inst✝² : Fact (1 ≤ p)
inst✝¹ : Fintype ι
𝕜 : Type u_5
inst✝ : SeminormedCommRing 𝕜
b : Basis ι 𝕜 (PiLp p fun x => 𝕜)
A : Matrix ι ι 𝕜
⊢ b.toMatrix ⇑(basisFun p 𝕜 ι) * A = of fun i j => (b.repr ((WithLp.equiv p ((i : ι) → (fun x => 𝕜) i)).symm (Aᵀ j))) i
state_after: p : ℝ≥0∞
𝕜✝ : Type u_1
ι : Type u_2
α : ι → Type u_3
β : ι → Type u_4
inst✝² : Fact (1 ≤ p)
inst✝¹ : Fintype ι
𝕜 : Type u_5
inst✝ : SeminormedCommRing 𝕜
b : Basis ι 𝕜 (PiLp p fun x => 𝕜)
A : Matrix ι ι 𝕜
this :
  (b.map (WithLp.linearEquiv p 𝕜 ((i : ι) → (fun x => 𝕜) i))).toMatrix ⇑(Pi.basisFun 𝕜 ι) * A =
    of fun i j => ((b.map (WithLp.linearEquiv p 𝕜 ((i : ι) → (fun x => 𝕜) i))).repr (Aᵀ j)) i
⊢ b.toMatrix ⇑(basisFun p 𝕜 ι) * A = of fun i j => (b.repr ((WithLp.equiv p ((i : ι) → (fun x => 𝕜) i)).symm (Aᵀ j))) i

tactic: simp_rw [← PiLp.basisFun_map p, Basis.map_repr, LinearEquiv.trans_apply,
  WithLp.linearEquiv_symm_apply, Basis.toMatrix_map, Function.comp, Basis.map_apply,
  LinearEquiv.symm_apply_apply] at this
state_before: p : ℝ≥0∞
𝕜✝ : Type u_1
ι : Type u_2
α : ι → Type u_3
β : ι → Type u_4
inst✝² : Fact (1 ≤ p)
inst✝¹ : Fintype ι
𝕜 : Type u_5
inst✝ : SeminormedCommRing 𝕜
b : Basis ι 𝕜 (PiLp p fun x => 𝕜)
A : Matrix ι ι 𝕜
this :
  (b.map (WithLp.linearEquiv p 𝕜 ((i : ι) → (fun x => 𝕜) i))).toMatrix ⇑(Pi.basisFun 𝕜 ι) * A =
    of fun i j => ((b.map (WithLp.linearEquiv p 𝕜 ((i : ι) → (fun x => 𝕜) i))).repr (Aᵀ j)) i
⊢ b.toMatrix ⇑(basisFun p 𝕜 ι) * A = of fun i j => (b.repr ((WithLp.equiv p ((i : ι) → (fun x => 𝕜) i)).symm (Aᵀ j))) i
state_after: p : ℝ≥0∞
𝕜✝ : Type u_1
ι : Type u_2
α : ι → Type u_3
β : ι → Type u_4
inst✝² : Fact (1 ≤ p)
inst✝¹ : Fintype ι
𝕜 : Type u_5
inst✝ : SeminormedCommRing 𝕜
b : Basis ι 𝕜 (PiLp p fun x => 𝕜)
A : Matrix ι ι 𝕜
this : (b.toMatrix fun x => (basisFun p 𝕜 ι) x) * A = of fun i j => (b.repr ((WithLp.equiv p (ι → 𝕜)).symm (Aᵀ j))) i
⊢ b.toMatrix ⇑(basisFun p 𝕜 ι) * A = of fun i j => (b.repr ((WithLp.equiv p ((i : ι) → (fun x => 𝕜) i)).symm (Aᵀ j))) i

tactic: exact this
state_before: p : ℝ≥0∞
𝕜✝ : Type u_1
ι : Type u_2
α : ι → Type u_3
β : ι → Type u_4
inst✝² : Fact (1 ≤ p)
inst✝¹ : Fintype ι
𝕜 : Type u_5
inst✝ : SeminormedCommRing 𝕜
b : Basis ι 𝕜 (PiLp p fun x => 𝕜)
A : Matrix ι ι 𝕜
this : (b.toMatrix fun x => (basisFun p 𝕜 ι) x) * A = of fun i j => (b.repr ((WithLp.equiv p (ι → 𝕜)).symm (Aᵀ j))) i
⊢ b.toMatrix ⇑(basisFun p 𝕜 ι) * A = of fun i j => (b.repr ((WithLp.equiv p ((i : ι) → (fun x => 𝕜) i)).symm (Aᵀ j))) i
state_after: no goals
Theorem: List.TProd.elim_mk
File: Mathlib/Data/Prod/TProd.lean

tactic: by_cases hji : j = i
state_before: ι : Type u
α : ι → Type v
i✝ j✝ : ι
l : List ι
f✝ : (i : ι) → α i
inst✝ : DecidableEq ι
i : ι
is : List ι
f : (i : ι) → α i
j : ι
hj : j ∈ i :: is
⊢ (TProd.mk (i :: is) f).elim hj = f j
state_after: case pos
ι : Type u
α : ι → Type v
i✝ j✝ : ι
l : List ι
f✝ : (i : ι) → α i
inst✝ : DecidableEq ι
i : ι
is : List ι
f : (i : ι) → α i
j : ι
hj : j ∈ i :: is
hji : j = i
⊢ (TProd.mk (i :: is) f).elim hj = f j

case neg
ι : Type u
α : ι → Type v
i✝ j✝ : ι
l : List ι
f✝ : (i : ι) → α i
inst✝ : DecidableEq ι
i : ι
is : List ι
f : (i : ι) → α i
j : ι
hj : j ∈ i :: is
hji : ¬j = i
⊢ (TProd.mk (i :: is) f).elim hj = f j

tactic: subst hji
state_before: case pos
ι : Type u
α : ι → Type v
i✝ j✝ : ι
l : List ι
f✝ : (i : ι) → α i
inst✝ : DecidableEq ι
i : ι
is : List ι
f : (i : ι) → α i
j : ι
hj : j ∈ i :: is
hji : j = i
⊢ (TProd.mk (i :: is) f).elim hj = f j
state_after: case pos
ι : Type u
α : ι → Type v
i j✝ : ι
l : List ι
f✝ : (i : ι) → α i
inst✝ : DecidableEq ι
is : List ι
f : (i : ι) → α i
j : ι
hj : j ∈ j :: is
⊢ (TProd.mk (j :: is) f).elim hj = f j

tactic: simp
state_before: case pos
ι : Type u
α : ι → Type v
i j✝ : ι
l : List ι
f✝ : (i : ι) → α i
inst✝ : DecidableEq ι
is : List ι
f : (i : ι) → α i
j : ι
hj : j ∈ j :: is
⊢ (TProd.mk (j :: is) f).elim hj = f j
state_after: no goals

tactic: rw [TProd.elim_of_ne _ hji, snd_mk, elim_mk is]
state_before: case neg
ι : Type u
α : ι → Type v
i✝ j✝ : ι
l : List ι
f✝ : (i : ι) → α i
inst✝ : DecidableEq ι
i : ι
is : List ι
f : (i : ι) → α i
j : ι
hj : j ∈ i :: is
hji : ¬j = i
⊢ (TProd.mk (i :: is) f).elim hj = f j
state_after: no goals
Theorem: Real.one_lt_rpow
File: Mathlib/Analysis/SpecialFunctions/Pow/Real.lean

tactic: rw [← one_rpow z]
state_before: x✝ y z✝ : ℝ
n : ℕ
x z : ℝ
hx : 1 < x
hz : 0 < z
⊢ 1 < x ^ z
state_after: x✝ y z✝ : ℝ
n : ℕ
x z : ℝ
hx : 1 < x
hz : 0 < z
⊢ 1 ^ z < x ^ z

tactic: exact rpow_lt_rpow zero_le_one hx hz
state_before: x✝ y z✝ : ℝ
n : ℕ
x z : ℝ
hx : 1 < x
hz : 0 < z
⊢ 1 ^ z < x ^ z
state_after: no goals
Theorem: CategoryTheory.IsIso.hom_inv_id_assoc
File: Mathlib/CategoryTheory/Iso.lean

tactic: simp [← Category.assoc]
state_before: C : Type u
inst✝ : Category.{v, u} C
X Y Z✝ : C
f : X ⟶ Y
I : IsIso f
Z : C
g : X ⟶ Z
⊢ f ≫ inv f ≫ g = g
state_after: no goals
Theorem: Polynomial.mem_roots_sub_C'
File: Mathlib/Algebra/Polynomial/Roots.lean

tactic: rw [mem_roots', IsRoot.def, sub_ne_zero, eval_sub, sub_eq_zero, eval_C]
state_before: R : Type u
S : Type v
T : Type w
a✝ b : R
n : ℕ
inst✝¹ : CommRing R
inst✝ : IsDomain R
p✝ q p : R[X]
a x : R
⊢ x ∈ (p - C a).roots ↔ p ≠ C a ∧ eval x p = a
state_after: no goals
Theorem: NonUnitalStarAlgebra.coe_bot
File: Mathlib/Algebra/Star/NonUnitalSubalgebra.lean

tactic: simp only [Set.ext_iff, NonUnitalStarAlgebra.mem_bot, SetLike.mem_coe, Set.mem_singleton_iff,
  iff_self_iff, forall_const]
state_before: F : Type v'
R' : Type u'
R : Type u
A : Type v
B : Type w
C : Type w'
inst✝¹⁶ : CommSemiring R
inst✝¹⁵ : StarRing R
inst✝¹⁴ : NonUnitalSemiring A
inst✝¹³ : StarRing A
inst✝¹² : Module R A
inst✝¹¹ : IsScalarTower R A A
inst✝¹⁰ : SMulCommClass R A A
inst✝⁹ : StarModule R A
inst✝⁸ : NonUnitalSemiring B
inst✝⁷ : StarRing B
inst✝⁶ : Module R B
inst✝⁵ : IsScalarTower R B B
inst✝⁴ : SMulCommClass R B B
inst✝³ : StarModule R B
inst✝² : FunLike F A B
inst✝¹ : NonUnitalAlgHomClass F R A B
inst✝ : NonUnitalStarAlgHomClass F R A B
⊢ ↑⊥ = {0}
state_after: no goals
Theorem: ProjectiveSpectrum.mem_compl_zeroLocus_iff_not_mem
File: Mathlib/AlgebraicGeometry/ProjectiveSpectrum/Topology.lean

tactic: rw [Set.mem_compl_iff, mem_zeroLocus, Set.singleton_subset_iff]
state_before: R : Type u_1
A : Type u_2
inst✝³ : CommSemiring R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
I : ProjectiveSpectrum 𝒜
⊢ I ∈ (zeroLocus 𝒜 {f})ᶜ ↔ f ∉ I.asHomogeneousIdeal
state_after: R : Type u_1
A : Type u_2
inst✝³ : CommSemiring R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
I : ProjectiveSpectrum 𝒜
⊢ f ∉ ↑I.asHomogeneousIdeal ↔ f ∉ I.asHomogeneousIdeal

tactic: rfl
state_before: R : Type u_1
A : Type u_2
inst✝³ : CommSemiring R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
I : ProjectiveSpectrum 𝒜
⊢ f ∉ ↑I.asHomogeneousIdeal ↔ f ∉ I.asHomogeneousIdeal
state_after: no goals
Theorem: Filter.ZeroAtFilter.add
File: Mathlib/Order/Filter/ZeroAndBoundedAtFilter.lean

tactic: simpa using hf.add hg
state_before: 𝕜 : Type u_1
α : Type u_2
β : Type u_3
inst✝² : TopologicalSpace β
inst✝¹ : AddZeroClass β
inst✝ : ContinuousAdd β
l : Filter α
f g : α → β
hf : l.ZeroAtFilter f
hg : l.ZeroAtFilter g
⊢ l.ZeroAtFilter (f + g)
state_after: no goals
Theorem: Subalgebra.star_mem_star_iff
File: Mathlib/Algebra/Star/Subalgebra.lean

tactic: simp only [mem_star_iff, star_star]
state_before: F : Type u_1
R : Type u_2
A : Type u_3
B : Type u_4
inst✝⁹ : CommSemiring R
inst✝⁸ : StarRing R
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
inst✝⁵ : StarRing A
inst✝⁴ : StarModule R A
inst✝³ : Semiring B
inst✝² : Algebra R B
inst✝¹ : StarRing B
inst✝ : StarModule R B
S : Subalgebra R A
x : A
⊢ star x ∈ star S ↔ x ∈ S
state_after: no goals
Theorem: ContinuousMap.sup_mem_subalgebra_closure
File: Mathlib/Topology/ContinuousFunction/StoneWeierstrass.lean

tactic: rw [sup_eq_half_smul_add_add_abs_sub' ℝ]
state_before: X : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : CompactSpace X
A : Subalgebra ℝ C(X, ℝ)
f g : ↥A
⊢ ↑f ⊔ ↑g ∈ A.topologicalClosure
state_after: X : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : CompactSpace X
A : Subalgebra ℝ C(X, ℝ)
f g : ↥A
⊢ 2⁻¹ • (↑f + ↑g + |↑g - ↑f|) ∈ A.topologicalClosure

tactic: refine
  A.topologicalClosure.smul_mem
    (A.topologicalClosure.add_mem
      (A.topologicalClosure.add_mem (A.le_topologicalClosure f.property)
        (A.le_topologicalClosure g.property))
      ?_)
    _
state_before: X : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : CompactSpace X
A : Subalgebra ℝ C(X, ℝ)
f g : ↥A
⊢ 2⁻¹ • (↑f + ↑g + |↑g - ↑f|) ∈ A.topologicalClosure
state_after: X : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : CompactSpace X
A : Subalgebra ℝ C(X, ℝ)
f g : ↥A
⊢ |↑g - ↑f| ∈ A.topologicalClosure

tactic: exact mod_cast abs_mem_subalgebra_closure A _
state_before: X : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : CompactSpace X
A : Subalgebra ℝ C(X, ℝ)
f g : ↥A
⊢ |↑g - ↑f| ∈ A.topologicalClosure
state_after: no goals
Theorem: MeasureTheory.SimpleFunc.range_one
File: Mathlib/MeasureTheory/Function/SimpleFunc.lean

tactic: simp [eq_comm]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝² : MeasurableSpace α
inst✝¹ : Nonempty α
inst✝ : One β
x : β
⊢ x ∈ SimpleFunc.range 1 ↔ x ∈ {1}
state_after: no goals
Theorem: MeasureTheory.toFinite_zero
File: Mathlib/MeasureTheory/Measure/WithDensityFinite.lean

tactic: simp [Measure.toFinite, toFiniteAux_zero]
state_before: α : Type u_1
mα : MeasurableSpace α
μ : Measure α
⊢ Measure.toFinite 0 = 0
state_after: no goals
Theorem: Nat.evenOddRec_even
File: Mathlib/Data/Nat/EvenOddRec.lean

tactic: rw [evenOddRec, binaryRec_eq]
state_before: P : ℕ → Sort u_1
h0 : P 0
h_even : (i : ℕ) → P i → P (2 * i)
h_odd : (i : ℕ) → P i → P (2 * i + 1)
H : h_even 0 h0 = h0
n : ℕ
⊢ HEq (evenOddRec h0 h_even h_odd (bit false n)) (h_even n (evenOddRec h0 h_even h_odd n))
state_after: P : ℕ → Sort u_1
h0 : P 0
h_even : (i : ℕ) → P i → P (2 * i)
h_odd : (i : ℕ) → P i → P (2 * i + 1)
H : h_even 0 h0 = h0
n : ℕ
⊢ HEq
    (match false, n,
      binaryRec h0
        (fun x x_1 x_2 =>
          match x, x_1, x_2 with
          | false, i, hi => ⋯ ▸ h_even i hi
          | true, i, hi => ⋯ ▸ h_odd i hi)
        n with
    | false, i, hi => ⋯ ▸ h_even i hi
    | true, i, hi => ⋯ ▸ h_odd i hi)
    (h_even n (evenOddRec h0 h_even h_odd n))

case h
P : ℕ → Sort u_1
h0 : P 0
h_even : (i : ℕ) → P i → P (2 * i)
h_odd : (i : ℕ) → P i → P (2 * i + 1)
H : h_even 0 h0 = h0
n : ℕ
⊢ (match false, 0, h0 with
    | false, i, hi => ⋯ ▸ h_even i hi
    | true, i, hi => ⋯ ▸ h_odd i hi) =
    h0

tactic: apply eq_rec_heq
state_before: P : ℕ → Sort u_1
h0 : P 0
h_even : (i : ℕ) → P i → P (2 * i)
h_odd : (i : ℕ) → P i → P (2 * i + 1)
H : h_even 0 h0 = h0
n : ℕ
⊢ HEq
    (match false, n,
      binaryRec h0
        (fun x x_1 x_2 =>
          match x, x_1, x_2 with
          | false, i, hi => ⋯ ▸ h_even i hi
          | true, i, hi => ⋯ ▸ h_odd i hi)
        n with
    | false, i, hi => ⋯ ▸ h_even i hi
    | true, i, hi => ⋯ ▸ h_odd i hi)
    (h_even n (evenOddRec h0 h_even h_odd n))
state_after: no goals

tactic: exact H
state_before: case h
P : ℕ → Sort u_1
h0 : P 0
h_even : (i : ℕ) → P i → P (2 * i)
h_odd : (i : ℕ) → P i → P (2 * i + 1)
H : h_even 0 h0 = h0
n : ℕ
⊢ (match false, 0, h0 with
    | false, i, hi => ⋯ ▸ h_even i hi
    | true, i, hi => ⋯ ▸ h_odd i hi) =
    h0
state_after: no goals
Theorem: NNReal.lt_inv_iff_mul_lt
File: Mathlib/Data/NNReal/Basic.lean

tactic: rw [← mul_lt_mul_left (pos_iff_ne_zero.2 h), mul_inv_cancel h, mul_comm]
state_before: r p : ℝ≥0
h : p ≠ 0
⊢ r < p⁻¹ ↔ r * p < 1
state_after: no goals