1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: Finset.mem_sup
File: Mathlib/Data/Finset/Lattice.lean

tactic: change _ ↔ ∃ v ∈ s, x ∈ (f v).val
state_before: F : Type u_1
α✝ : Type u_2
β✝ : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
α : Type u_7
β : Type u_8
inst✝ : DecidableEq β
s : Finset α
f : α → Finset β
x : β
⊢ x ∈ s.sup f ↔ ∃ v ∈ s, x ∈ f v
state_after: F : Type u_1
α✝ : Type u_2
β✝ : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
α : Type u_7
β : Type u_8
inst✝ : DecidableEq β
s : Finset α
f : α → Finset β
x : β
⊢ x ∈ s.sup f ↔ ∃ v ∈ s, x ∈ (f v).val

tactic: rw [← Multiset.mem_sup, ← Multiset.mem_toFinset, sup_toFinset]
state_before: F : Type u_1
α✝ : Type u_2
β✝ : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
α : Type u_7
β : Type u_8
inst✝ : DecidableEq β
s : Finset α
f : α → Finset β
x : β
⊢ x ∈ s.sup f ↔ ∃ v ∈ s, x ∈ (f v).val
state_after: F : Type u_1
α✝ : Type u_2
β✝ : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
α : Type u_7
β : Type u_8
inst✝ : DecidableEq β
s : Finset α
f : α → Finset β
x : β
⊢ x ∈ s.sup f ↔ x ∈ s.sup fun x => (f x).val.toFinset

tactic: simp_rw [val_toFinset]
state_before: F : Type u_1
α✝ : Type u_2
β✝ : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
α : Type u_7
β : Type u_8
inst✝ : DecidableEq β
s : Finset α
f : α → Finset β
x : β
⊢ x ∈ s.sup f ↔ x ∈ s.sup fun x => (f x).val.toFinset
state_after: no goals
Theorem: Function.eq_update_self_iff
File: Mathlib/Logic/Function/Basic.lean

tactic: simp [eq_update_iff]
state_before: α : Sort u
β : α → Sort v
α' : Sort w
inst✝¹ : DecidableEq α
inst✝ : DecidableEq α'
f g : (a : α) → β a
a : α
b : β a
⊢ f = update f a b ↔ f a = b
state_after: no goals
Theorem: Computation.liftRel_def
File: Mathlib/Data/Seq/Computation.lean

tactic: let ⟨b', mb', ab⟩ := h.left ma
state_before: α : Type u
β : Type v
γ : Type w
R : α → β → Prop
ca : Computation α
cb : Computation β
h : LiftRel R ca cb
a : α
b : β
ma : a ∈ ca
mb : b ∈ cb
⊢ R a b
state_after: α : Type u
β : Type v
γ : Type w
R : α → β → Prop
ca : Computation α
cb : Computation β
h : LiftRel R ca cb
a : α
b : β
ma : a ∈ ca
mb : b ∈ cb
b' : β
mb' : b' ∈ cb
ab : R a b'
⊢ R a b

tactic: rwa [mem_unique mb mb']
state_before: α : Type u
β : Type v
γ : Type w
R : α → β → Prop
ca : Computation α
cb : Computation β
h : LiftRel R ca cb
a : α
b : β
ma : a ∈ ca
mb : b ∈ cb
b' : β
mb' : b' ∈ cb
ab : R a b'
⊢ R a b
state_after: no goals
Theorem: TrivSqZeroExt.fst_expSeries
File: Mathlib/Analysis/NormedSpace/TrivSqZeroExt.lean

tactic: simp [expSeries_apply_eq]
state_before: 𝕜 : Type u_1
S : Type u_2
R : Type u_3
M : Type u_4
inst✝¹⁵ : Field 𝕜
inst✝¹⁴ : Ring R
inst✝¹³ : AddCommGroup M
inst✝¹² : Algebra 𝕜 R
inst✝¹¹ : Module 𝕜 M
inst✝¹⁰ : Module R M
inst✝⁹ : Module Rᵐᵒᵖ M
inst✝⁸ : SMulCommClass R Rᵐᵒᵖ M
inst✝⁷ : IsScalarTower 𝕜 R M
inst✝⁶ : IsScalarTower 𝕜 Rᵐᵒᵖ M
inst✝⁵ : TopologicalSpace R
inst✝⁴ : TopologicalSpace M
inst✝³ : TopologicalRing R
inst✝² : TopologicalAddGroup M
inst✝¹ : ContinuousSMul R M
inst✝ : ContinuousSMul Rᵐᵒᵖ M
x : tsze R M
n : ℕ
⊢ ((expSeries 𝕜 (tsze R M) n) fun x_1 => x).fst = (expSeries 𝕜 R n) fun x_1 => x.fst
state_after: no goals
Theorem: AddCommMonoidWithOne.toAddMonoidWithOne_injective
File: Mathlib/Algebra/Ring/Ext.lean

tactic: rintro ⟨⟩ ⟨⟩ _
state_before: R : Type u
⊢ Function.Injective (@toAddMonoidWithOne R)
state_after: case mk.mk
R : Type u
toAddMonoidWithOne✝¹ : AddMonoidWithOne R
add_comm✝¹ : ∀ (a b : R), a + b = b + a
toAddMonoidWithOne✝ : AddMonoidWithOne R
add_comm✝ : ∀ (a b : R), a + b = b + a
a✝ : toAddMonoidWithOne = toAddMonoidWithOne
⊢ mk add_comm✝¹ = mk add_comm✝

tactic: congr
state_before: case mk.mk
R : Type u
toAddMonoidWithOne✝¹ : AddMonoidWithOne R
add_comm✝¹ : ∀ (a b : R), a + b = b + a
toAddMonoidWithOne✝ : AddMonoidWithOne R
add_comm✝ : ∀ (a b : R), a + b = b + a
a✝ : toAddMonoidWithOne = toAddMonoidWithOne
⊢ mk add_comm✝¹ = mk add_comm✝
state_after: no goals
Theorem: RootPairing.mapsTo_reflection_root
File: Mathlib/LinearAlgebra/RootSystem/Defs.lean

tactic: rintro - ⟨j, rfl⟩
state_before: ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
P : RootPairing ι R M N
i j : ι
⊢ MapsTo (⇑(P.reflection i)) (range ⇑P.root) (range ⇑P.root)
state_after: case intro
ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
P : RootPairing ι R M N
i j✝ j : ι
⊢ (P.reflection i) (P.root j) ∈ range ⇑P.root

tactic: exact P.root_reflection_perm i j ▸ mem_range_self (P.reflection_perm i j)
state_before: case intro
ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
P : RootPairing ι R M N
i j✝ j : ι
⊢ (P.reflection i) (P.root j) ∈ range ⇑P.root
state_after: no goals
Theorem: LSeriesSummable.add
File: Mathlib/NumberTheory/LSeries/Linearity.lean

tactic: simpa only [LSeriesSummable, ← term_add_apply] using Summable.add hf hg
state_before: f g : ℕ → ℂ
s : ℂ
hf : LSeriesSummable f s
hg : LSeriesSummable g s
⊢ LSeriesSummable (f + g) s
state_after: no goals
Theorem: EuclideanGeometry.exists_dist_eq_iff_exists_dist_orthogonalProjection_eq
File: Mathlib/Geometry/Euclidean/Circumcenter.lean

tactic: have h := dist_set_eq_iff_dist_orthogonalProjection_eq hps p
state_before: V : Type u_1
P : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : InnerProductSpace ℝ V
inst✝³ : MetricSpace P
inst✝² : NormedAddTorsor V P
s : AffineSubspace ℝ P
inst✝¹ : Nonempty ↥s
inst✝ : HasOrthogonalProjection s.direction
ps : Set P
hps : ps ⊆ ↑s
p : P
⊢ (∃ r, ∀ p1 ∈ ps, dist p1 p = r) ↔ ∃ r, ∀ p1 ∈ ps, dist p1 ↑((orthogonalProjection s) p) = r
state_after: V : Type u_1
P : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : InnerProductSpace ℝ V
inst✝³ : MetricSpace P
inst✝² : NormedAddTorsor V P
s : AffineSubspace ℝ P
inst✝¹ : Nonempty ↥s
inst✝ : HasOrthogonalProjection s.direction
ps : Set P
hps : ps ⊆ ↑s
p : P
h :
  (ps.Pairwise fun p1 p2 => dist p1 p = dist p2 p) ↔
    ps.Pairwise fun p1 p2 => dist p1 ↑((orthogonalProjection s) p) = dist p2 ↑((orthogonalProjection s) p)
⊢ (∃ r, ∀ p1 ∈ ps, dist p1 p = r) ↔ ∃ r, ∀ p1 ∈ ps, dist p1 ↑((orthogonalProjection s) p) = r

tactic: simp_rw [Set.pairwise_eq_iff_exists_eq] 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
s : AffineSubspace ℝ P
inst✝¹ : Nonempty ↥s
inst✝ : HasOrthogonalProjection s.direction
ps : Set P
hps : ps ⊆ ↑s
p : P
h :
  (ps.Pairwise fun p1 p2 => dist p1 p = dist p2 p) ↔
    ps.Pairwise fun p1 p2 => dist p1 ↑((orthogonalProjection s) p) = dist p2 ↑((orthogonalProjection s) p)
⊢ (∃ r, ∀ p1 ∈ ps, dist p1 p = r) ↔ ∃ r, ∀ p1 ∈ ps, dist p1 ↑((orthogonalProjection s) p) = r
state_after: V : Type u_1
P : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : InnerProductSpace ℝ V
inst✝³ : MetricSpace P
inst✝² : NormedAddTorsor V P
s : AffineSubspace ℝ P
inst✝¹ : Nonempty ↥s
inst✝ : HasOrthogonalProjection s.direction
ps : Set P
hps : ps ⊆ ↑s
p : P
h : (∃ z, ∀ x ∈ ps, dist x p = z) ↔ ∃ z, ∀ x ∈ ps, dist x ↑((orthogonalProjection s) p) = z
⊢ (∃ r, ∀ p1 ∈ ps, dist p1 p = r) ↔ ∃ r, ∀ p1 ∈ ps, dist p1 ↑((orthogonalProjection s) p) = r

tactic: exact h
state_before: V : Type u_1
P : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : InnerProductSpace ℝ V
inst✝³ : MetricSpace P
inst✝² : NormedAddTorsor V P
s : AffineSubspace ℝ P
inst✝¹ : Nonempty ↥s
inst✝ : HasOrthogonalProjection s.direction
ps : Set P
hps : ps ⊆ ↑s
p : P
h : (∃ z, ∀ x ∈ ps, dist x p = z) ↔ ∃ z, ∀ x ∈ ps, dist x ↑((orthogonalProjection s) p) = z
⊢ (∃ r, ∀ p1 ∈ ps, dist p1 p = r) ↔ ∃ r, ∀ p1 ∈ ps, dist p1 ↑((orthogonalProjection s) p) = r
state_after: no goals
Theorem: Commute.geom_sum₂_succ_eq
File: Mathlib/Algebra/GeomSum.lean

tactic: simp_rw [mul_sum, sum_range_succ_comm, tsub_self, pow_zero, mul_one, add_right_inj, ← mul_assoc,
  (h.symm.pow_right _).eq, mul_assoc, ← pow_succ']
state_before: α✝ α : Type u
inst✝ : Ring α
x y : α
h : Commute x y
n : ℕ
⊢ ∑ i ∈ range (n + 1), x ^ i * y ^ (n - i) = x ^ n + y * ∑ i ∈ range n, x ^ i * y ^ (n - 1 - i)
state_after: α✝ α : Type u
inst✝ : Ring α
x y : α
h : Commute x y
n : ℕ
⊢ ∑ i ∈ range n, x ^ i * y ^ (n - i) = ∑ x_1 ∈ range n, x ^ x_1 * y ^ (n - 1 - x_1 + 1)

tactic: refine sum_congr rfl fun i hi => ?_
state_before: α✝ α : Type u
inst✝ : Ring α
x y : α
h : Commute x y
n : ℕ
⊢ ∑ i ∈ range n, x ^ i * y ^ (n - i) = ∑ x_1 ∈ range n, x ^ x_1 * y ^ (n - 1 - x_1 + 1)
state_after: α✝ α : Type u
inst✝ : Ring α
x y : α
h : Commute x y
n i : ℕ
hi : i ∈ range n
⊢ x ^ i * y ^ (n - i) = x ^ i * y ^ (n - 1 - i + 1)

tactic: suffices n - 1 - i + 1 = n - i by rw [this]
state_before: α✝ α : Type u
inst✝ : Ring α
x y : α
h : Commute x y
n i : ℕ
hi : i ∈ range n
⊢ x ^ i * y ^ (n - i) = x ^ i * y ^ (n - 1 - i + 1)
state_after: α✝ α : Type u
inst✝ : Ring α
x y : α
h : Commute x y
n i : ℕ
hi : i ∈ range n
⊢ n - 1 - i + 1 = n - i

tactic: cases' n with n
state_before: α✝ α : Type u
inst✝ : Ring α
x y : α
h : Commute x y
n i : ℕ
hi : i ∈ range n
⊢ n - 1 - i + 1 = n - i
state_after: case zero
α✝ α : Type u
inst✝ : Ring α
x y : α
h : Commute x y
i : ℕ
hi : i ∈ range 0
⊢ 0 - 1 - i + 1 = 0 - i

case succ
α✝ α : Type u
inst✝ : Ring α
x y : α
h : Commute x y
i n : ℕ
hi : i ∈ range (n + 1)
⊢ n + 1 - 1 - i + 1 = n + 1 - i

tactic: rw [this]
state_before: α✝ α : Type u
inst✝ : Ring α
x y : α
h : Commute x y
n i : ℕ
hi : i ∈ range n
this : n - 1 - i + 1 = n - i
⊢ x ^ i * y ^ (n - i) = x ^ i * y ^ (n - 1 - i + 1)
state_after: no goals

tactic: exact absurd (List.mem_range.mp hi) i.not_lt_zero
state_before: case zero
α✝ α : Type u
inst✝ : Ring α
x y : α
h : Commute x y
i : ℕ
hi : i ∈ range 0
⊢ 0 - 1 - i + 1 = 0 - i
state_after: no goals

tactic: rw [tsub_add_eq_add_tsub (Nat.le_sub_one_of_lt (List.mem_range.mp hi)),
  tsub_add_cancel_of_le (Nat.succ_le_iff.mpr n.succ_pos)]
state_before: case succ
α✝ α : Type u
inst✝ : Ring α
x y : α
h : Commute x y
i n : ℕ
hi : i ∈ range (n + 1)
⊢ n + 1 - 1 - i + 1 = n + 1 - i
state_after: no goals
Theorem: UniformOnFun.topologicalSpace_eq
File: Mathlib/Topology/UniformSpace/UniformConvergenceTopology.lean

tactic: simp only [UniformOnFun.topologicalSpace, UniformSpace.toTopologicalSpace_iInf]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
s s' : Set α
x : α
p : Filter ι
g : ι → α
inst✝ : UniformSpace β
𝔖 : Set (Set α)
⊢ topologicalSpace α β 𝔖 =
    ⨅ s ∈ 𝔖, TopologicalSpace.induced (⇑UniformFun.ofFun ∘ s.restrict ∘ ⇑(toFun 𝔖)) (UniformFun.topologicalSpace (↑s) β)
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
s s' : Set α
x : α
p : Filter ι
g : ι → α
inst✝ : UniformSpace β
𝔖 : Set (Set α)
⊢ ⨅ i ∈ 𝔖, UniformSpace.toTopologicalSpace =
    ⨅ s ∈ 𝔖, TopologicalSpace.induced (⇑UniformFun.ofFun ∘ s.restrict ∘ ⇑(toFun 𝔖)) (UniformFun.topologicalSpace (↑s) β)

tactic: rfl
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
s s' : Set α
x : α
p : Filter ι
g : ι → α
inst✝ : UniformSpace β
𝔖 : Set (Set α)
⊢ ⨅ i ∈ 𝔖, UniformSpace.toTopologicalSpace =
    ⨅ s ∈ 𝔖, TopologicalSpace.induced (⇑UniformFun.ofFun ∘ s.restrict ∘ ⇑(toFun 𝔖)) (UniformFun.topologicalSpace (↑s) β)
state_after: no goals
Theorem: Finset.abs_sum_of_nonneg'
File: Mathlib/Algebra/Order/BigOperators/Group/Finset.lean

tactic: rw [abs_of_nonneg (Finset.sum_nonneg' hf)]
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
M : Type u_4
N : Type u_5
G✝ : Type u_6
k : Type u_7
R : Type u_8
G : Type u_9
inst✝ : LinearOrderedAddCommGroup G
f : ι → G
s : Finset ι
hf : ∀ (i : ι), 0 ≤ f i
⊢ |∑ i ∈ s, f i| = ∑ i ∈ s, f i
state_after: no goals
Theorem: GaloisInsertion.l_biInf_of_ul_eq_self
File: Mathlib/Order/GaloisConnection.lean

tactic: rw [iInf_subtype', iInf_subtype']
state_before: α : Type u
β : Type v
γ : Type w
ι✝ : Sort x
κ : ι✝ → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
l : α → β
u : β → α
inst✝¹ : CompleteLattice α
inst✝ : CompleteLattice β
gi : GaloisInsertion l u
ι : Sort x
p : ι → Prop
f : (i : ι) → p i → α
hf : ∀ (i : ι) (hi : p i), u (l (f i hi)) = f i hi
⊢ l (⨅ i, ⨅ (hi : p i), f i hi) = ⨅ i, ⨅ (hi : p i), l (f i hi)
state_after: α : Type u
β : Type v
γ : Type w
ι✝ : Sort x
κ : ι✝ → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
l : α → β
u : β → α
inst✝¹ : CompleteLattice α
inst✝ : CompleteLattice β
gi : GaloisInsertion l u
ι : Sort x
p : ι → Prop
f : (i : ι) → p i → α
hf : ∀ (i : ι) (hi : p i), u (l (f i hi)) = f i hi
⊢ l (⨅ x, f ↑x ⋯) = ⨅ x, l (f ↑x ⋯)

tactic: exact gi.l_iInf_of_ul_eq_self _ fun _ => hf _ _
state_before: α : Type u
β : Type v
γ : Type w
ι✝ : Sort x
κ : ι✝ → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
l : α → β
u : β → α
inst✝¹ : CompleteLattice α
inst✝ : CompleteLattice β
gi : GaloisInsertion l u
ι : Sort x
p : ι → Prop
f : (i : ι) → p i → α
hf : ∀ (i : ι) (hi : p i), u (l (f i hi)) = f i hi
⊢ l (⨅ x, f ↑x ⋯) = ⨅ x, l (f ↑x ⋯)
state_after: no goals
Theorem: SimpleGraph.dist_comm
File: Mathlib/Combinatorics/SimpleGraph/Metric.lean

tactic: by_cases h : G.Reachable u v
state_before: V : Type u_1
G : SimpleGraph V
u v : V
⊢ G.dist u v = G.dist v u
state_after: case pos
V : Type u_1
G : SimpleGraph V
u v : V
h : G.Reachable u v
⊢ G.dist u v = G.dist v u

case neg
V : Type u_1
G : SimpleGraph V
u v : V
h : ¬G.Reachable u v
⊢ G.dist u v = G.dist v u

tactic: apply le_antisymm (dist_comm_aux h) (dist_comm_aux h.symm)
state_before: case pos
V : Type u_1
G : SimpleGraph V
u v : V
h : G.Reachable u v
⊢ G.dist u v = G.dist v u
state_after: no goals

tactic: have h' : ¬G.Reachable v u := fun h' => absurd h'.symm h
state_before: case neg
V : Type u_1
G : SimpleGraph V
u v : V
h : ¬G.Reachable u v
⊢ G.dist u v = G.dist v u
state_after: case neg
V : Type u_1
G : SimpleGraph V
u v : V
h : ¬G.Reachable u v
h' : ¬G.Reachable v u
⊢ G.dist u v = G.dist v u

tactic: simp [h, h', dist_eq_zero_of_not_reachable]
state_before: case neg
V : Type u_1
G : SimpleGraph V
u v : V
h : ¬G.Reachable u v
h' : ¬G.Reachable v u
⊢ G.dist u v = G.dist v u
state_after: no goals
Theorem: Prod.fst_eq_iff
File: Mathlib/Data/Prod/Basic.lean

tactic: simp
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
a : α
b : β
x : α
⊢ (a, b).fst = x ↔ (a, b) = (x, (a, b).snd)
state_after: no goals
Theorem: InnerProductGeometry.norm_sub_eq_add_norm_of_angle_eq_pi
File: Mathlib/Geometry/Euclidean/Angle/Unoriented/Basic.lean

tactic: rw [← sq_eq_sq (norm_nonneg (x - y)) (add_nonneg (norm_nonneg x) (norm_nonneg y)),
  norm_sub_pow_two_real, inner_eq_neg_mul_norm_of_angle_eq_pi h]
state_before: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x✝ y✝ x y : V
h : angle x y = π
⊢ ‖x - y‖ = ‖x‖ + ‖y‖
state_after: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x✝ y✝ x y : V
h : angle x y = π
⊢ ‖x‖ ^ 2 - 2 * -(‖x‖ * ‖y‖) + ‖y‖ ^ 2 = (‖x‖ + ‖y‖) ^ 2

tactic: ring
state_before: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x✝ y✝ x y : V
h : angle x y = π
⊢ ‖x‖ ^ 2 - 2 * -(‖x‖ * ‖y‖) + ‖y‖ ^ 2 = (‖x‖ + ‖y‖) ^ 2
state_after: no goals
Theorem: Matrix.fromRows_inj
File: Mathlib/Data/Matrix/ColumnRowPartitioned.lean

tactic: intros x1 x2 y1 y2
state_before: R : Type u_1
m : Type u_2
m₁ : Type u_3
m₂ : Type u_4
n : Type u_5
n₁ : Type u_6
n₂ : Type u_7
inst✝¹¹ : Fintype m
inst✝¹⁰ : Fintype m₁
inst✝⁹ : Fintype m₂
inst✝⁸ : Fintype n
inst✝⁷ : Fintype n₁
inst✝⁶ : Fintype n₂
inst✝⁵ : DecidableEq m
inst✝⁴ : DecidableEq m₁
inst✝³ : DecidableEq m₂
inst✝² : DecidableEq n
inst✝¹ : DecidableEq n₁
inst✝ : DecidableEq n₂
⊢ Function.Injective2 fromRows
state_after: R : Type u_1
m : Type u_2
m₁ : Type u_3
m₂ : Type u_4
n : Type u_5
n₁ : Type u_6
n₂ : Type u_7
inst✝¹¹ : Fintype m
inst✝¹⁰ : Fintype m₁
inst✝⁹ : Fintype m₂
inst✝⁸ : Fintype n
inst✝⁷ : Fintype n₁
inst✝⁶ : Fintype n₂
inst✝⁵ : DecidableEq m
inst✝⁴ : DecidableEq m₁
inst✝³ : DecidableEq m₂
inst✝² : DecidableEq n
inst✝¹ : DecidableEq n₁
inst✝ : DecidableEq n₂
x1 x2 : Matrix m₁ n R
y1 y2 : Matrix m₂ n R
⊢ x1.fromRows y1 = x2.fromRows y2 → x1 = x2 ∧ y1 = y2

tactic: simp only [Function.funext_iff, ← Matrix.ext_iff]
state_before: R : Type u_1
m : Type u_2
m₁ : Type u_3
m₂ : Type u_4
n : Type u_5
n₁ : Type u_6
n₂ : Type u_7
inst✝¹¹ : Fintype m
inst✝¹⁰ : Fintype m₁
inst✝⁹ : Fintype m₂
inst✝⁸ : Fintype n
inst✝⁷ : Fintype n₁
inst✝⁶ : Fintype n₂
inst✝⁵ : DecidableEq m
inst✝⁴ : DecidableEq m₁
inst✝³ : DecidableEq m₂
inst✝² : DecidableEq n
inst✝¹ : DecidableEq n₁
inst✝ : DecidableEq n₂
x1 x2 : Matrix m₁ n R
y1 y2 : Matrix m₂ n R
⊢ x1.fromRows y1 = x2.fromRows y2 → x1 = x2 ∧ y1 = y2
state_after: R : Type u_1
m : Type u_2
m₁ : Type u_3
m₂ : Type u_4
n : Type u_5
n₁ : Type u_6
n₂ : Type u_7
inst✝¹¹ : Fintype m
inst✝¹⁰ : Fintype m₁
inst✝⁹ : Fintype m₂
inst✝⁸ : Fintype n
inst✝⁷ : Fintype n₁
inst✝⁶ : Fintype n₂
inst✝⁵ : DecidableEq m
inst✝⁴ : DecidableEq m₁
inst✝³ : DecidableEq m₂
inst✝² : DecidableEq n
inst✝¹ : DecidableEq n₁
inst✝ : DecidableEq n₂
x1 x2 : Matrix m₁ n R
y1 y2 : Matrix m₂ n R
⊢ (∀ (i : m₁ ⊕ m₂) (j : n), x1.fromRows y1 i j = x2.fromRows y2 i j) →
    (∀ (i : m₁) (j : n), x1 i j = x2 i j) ∧ ∀ (i : m₂) (j : n), y1 i j = y2 i j

tactic: aesop
state_before: R : Type u_1
m : Type u_2
m₁ : Type u_3
m₂ : Type u_4
n : Type u_5
n₁ : Type u_6
n₂ : Type u_7
inst✝¹¹ : Fintype m
inst✝¹⁰ : Fintype m₁
inst✝⁹ : Fintype m₂
inst✝⁸ : Fintype n
inst✝⁷ : Fintype n₁
inst✝⁶ : Fintype n₂
inst✝⁵ : DecidableEq m
inst✝⁴ : DecidableEq m₁
inst✝³ : DecidableEq m₂
inst✝² : DecidableEq n
inst✝¹ : DecidableEq n₁
inst✝ : DecidableEq n₂
x1 x2 : Matrix m₁ n R
y1 y2 : Matrix m₂ n R
⊢ (∀ (i : m₁ ⊕ m₂) (j : n), x1.fromRows y1 i j = x2.fromRows y2 i j) →
    (∀ (i : m₁) (j : n), x1 i j = x2 i j) ∧ ∀ (i : m₂) (j : n), y1 i j = y2 i j
state_after: no goals
Theorem: Surreal.Multiplication.mulOption_lt_iff_P1
File: Mathlib/SetTheory/Surreal/Multiplication.lean

tactic: dsimp only [P1, mulOption, quot_sub, quot_add]
state_before: x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
i j : x.LeftMoves
k : y.LeftMoves
l : (-y).LeftMoves
⊢ ⟦x.mulOption y i k⟧ < -⟦x.mulOption (-y) j l⟧ ↔ P1 (x.moveLeft i) x (x.moveLeft j) y (y.moveLeft k) (-(-y).moveLeft l)
state_after: x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
i j : x.LeftMoves
k : y.LeftMoves
l : (-y).LeftMoves
⊢ ⟦x.moveLeft i * y⟧ + ⟦x * y.moveLeft k⟧ - ⟦x.moveLeft i * y.moveLeft k⟧ <
      -(⟦x.moveLeft j * -y⟧ + ⟦x * (-y).moveLeft l⟧ - ⟦x.moveLeft j * (-y).moveLeft l⟧) ↔
    ⟦x.moveLeft i * y⟧ + ⟦x * y.moveLeft k⟧ - ⟦x.moveLeft i * y.moveLeft k⟧ <
      ⟦x.moveLeft j * y⟧ + ⟦x * -(-y).moveLeft l⟧ - ⟦x.moveLeft j * -(-y).moveLeft l⟧

tactic: simp_rw [neg_sub', neg_add, quot_mul_neg, neg_neg]
state_before: x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
i j : x.LeftMoves
k : y.LeftMoves
l : (-y).LeftMoves
⊢ ⟦x.moveLeft i * y⟧ + ⟦x * y.moveLeft k⟧ - ⟦x.moveLeft i * y.moveLeft k⟧ <
      -(⟦x.moveLeft j * -y⟧ + ⟦x * (-y).moveLeft l⟧ - ⟦x.moveLeft j * (-y).moveLeft l⟧) ↔
    ⟦x.moveLeft i * y⟧ + ⟦x * y.moveLeft k⟧ - ⟦x.moveLeft i * y.moveLeft k⟧ <
      ⟦x.moveLeft j * y⟧ + ⟦x * -(-y).moveLeft l⟧ - ⟦x.moveLeft j * -(-y).moveLeft l⟧
state_after: no goals
Theorem: nilpotencyClass_eq_succ_iff
File: Mathlib/RingTheory/Nilpotent/Defs.lean

tactic: let s : Set ℕ := {k | x ^ k = 0}
state_before: R : Type u_1
S : Type u_2
x y : R
inst✝ : MonoidWithZero R
k : ℕ
⊢ nilpotencyClass x = k + 1 ↔ x ^ (k + 1) = 0 ∧ x ^ k ≠ 0
state_after: R : Type u_1
S : Type u_2
x y : R
inst✝ : MonoidWithZero R
k : ℕ
s : Set ℕ := {k | x ^ k = 0}
⊢ nilpotencyClass x = k + 1 ↔ x ^ (k + 1) = 0 ∧ x ^ k ≠ 0

tactic: have : ∀ k₁ k₂ : ℕ, k₁ ≤ k₂ → k₁ ∈ s → k₂ ∈ s := fun k₁ k₂ h_le hk₁ ↦ pow_eq_zero_of_le h_le hk₁
state_before: R : Type u_1
S : Type u_2
x y : R
inst✝ : MonoidWithZero R
k : ℕ
s : Set ℕ := {k | x ^ k = 0}
⊢ nilpotencyClass x = k + 1 ↔ x ^ (k + 1) = 0 ∧ x ^ k ≠ 0
state_after: R : Type u_1
S : Type u_2
x y : R
inst✝ : MonoidWithZero R
k : ℕ
s : Set ℕ := {k | x ^ k = 0}
this : ∀ (k₁ k₂ : ℕ), k₁ ≤ k₂ → k₁ ∈ s → k₂ ∈ s
⊢ nilpotencyClass x = k + 1 ↔ x ^ (k + 1) = 0 ∧ x ^ k ≠ 0

tactic: simp [s, nilpotencyClass, Nat.sInf_upward_closed_eq_succ_iff this]
state_before: R : Type u_1
S : Type u_2
x y : R
inst✝ : MonoidWithZero R
k : ℕ
s : Set ℕ := {k | x ^ k = 0}
this : ∀ (k₁ k₂ : ℕ), k₁ ≤ k₂ → k₁ ∈ s → k₂ ∈ s
⊢ nilpotencyClass x = k + 1 ↔ x ^ (k + 1) = 0 ∧ x ^ k ≠ 0
state_after: no goals
Theorem: CliffordAlgebra.isUnit_ι_of_isUnit
File: Mathlib/LinearAlgebra/CliffordAlgebra/Inversion.lean

tactic: cases h.nonempty_invertible
state_before: R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
Q : QuadraticForm R M
m : M
h : IsUnit (Q m)
⊢ IsUnit ((ι Q) m)
state_after: case intro
R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
Q : QuadraticForm R M
m : M
h : IsUnit (Q m)
val✝ : Invertible (Q m)
⊢ IsUnit ((ι Q) m)

tactic: letI := invertibleιOfInvertible Q m
state_before: case intro
R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
Q : QuadraticForm R M
m : M
h : IsUnit (Q m)
val✝ : Invertible (Q m)
⊢ IsUnit ((ι Q) m)
state_after: case intro
R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
Q : QuadraticForm R M
m : M
h : IsUnit (Q m)
val✝ : Invertible (Q m)
this : Invertible ((ι Q) m) := invertibleιOfInvertible Q m
⊢ IsUnit ((ι Q) m)

tactic: exact isUnit_of_invertible (ι Q m)
state_before: case intro
R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
Q : QuadraticForm R M
m : M
h : IsUnit (Q m)
val✝ : Invertible (Q m)
this : Invertible ((ι Q) m) := invertibleιOfInvertible Q m
⊢ IsUnit ((ι Q) m)
state_after: no goals
Theorem: NumberField.RingOfIntegers.isIntegral
File: Mathlib/NumberTheory/NumberField/Basic.lean

tactic: obtain ⟨P, hPm, hP⟩ := x.isIntegral_coe
state_before: K : Type u_1
L : Type u_2
inst✝¹ : Field K
inst✝ : Field L
nf : NumberField K
x : 𝓞 K
⊢ IsIntegral ℤ x
state_after: case intro.intro
K : Type u_1
L : Type u_2
inst✝¹ : Field K
inst✝ : Field L
nf : NumberField K
x : 𝓞 K
P : Polynomial ℤ
hPm : P.Monic
hP : Polynomial.eval₂ (algebraMap ℤ K) ((algebraMap (𝓞 K) K) x) P = 0
⊢ IsIntegral ℤ x

tactic: refine ⟨P, hPm, ?_⟩
state_before: case intro.intro
K : Type u_1
L : Type u_2
inst✝¹ : Field K
inst✝ : Field L
nf : NumberField K
x : 𝓞 K
P : Polynomial ℤ
hPm : P.Monic
hP : Polynomial.eval₂ (algebraMap ℤ K) ((algebraMap (𝓞 K) K) x) P = 0
⊢ IsIntegral ℤ x
state_after: case intro.intro
K : Type u_1
L : Type u_2
inst✝¹ : Field K
inst✝ : Field L
nf : NumberField K
x : 𝓞 K
P : Polynomial ℤ
hPm : P.Monic
hP : Polynomial.eval₂ (algebraMap ℤ K) ((algebraMap (𝓞 K) K) x) P = 0
⊢ Polynomial.eval₂ (algebraMap ℤ (𝓞 K)) x P = 0

tactic: rwa [IsScalarTower.algebraMap_eq (S := 𝓞 K), ← Polynomial.hom_eval₂, coe_eq_zero_iff] at hP
state_before: case intro.intro
K : Type u_1
L : Type u_2
inst✝¹ : Field K
inst✝ : Field L
nf : NumberField K
x : 𝓞 K
P : Polynomial ℤ
hPm : P.Monic
hP : Polynomial.eval₂ (algebraMap ℤ K) ((algebraMap (𝓞 K) K) x) P = 0
⊢ Polynomial.eval₂ (algebraMap ℤ (𝓞 K)) x P = 0
state_after: no goals
Theorem: EReal.coe_coe_sign
File: Mathlib/Data/Real/EReal.lean

tactic: cases x <;> rfl
state_before: x : SignType
⊢ ↑↑x = ↑x
state_after: no goals
Theorem: AddCircle.finite_setOf_add_order_eq
File: Mathlib/Topology/Instances/AddCircle.lean

tactic: simp [hn.ne']
state_before: 𝕜 : Type u_1
B : Type u_2
inst✝² : LinearOrderedField 𝕜
inst✝¹ : TopologicalSpace 𝕜
inst✝ : OrderTopology 𝕜
p q : 𝕜
hp : Fact (0 < p)
n : ℕ
hn : 0 < n
⊢ Nat.card ↑{u | addOrderOf u = n} ≠ 0
state_after: no goals
Theorem: Real.Gamma_one
File: Mathlib/Analysis/SpecialFunctions/Gamma/Basic.lean

tactic: rw [Gamma, Complex.ofReal_one, Complex.Gamma_one, Complex.one_re]
state_before: ⊢ Gamma 1 = 1
state_after: no goals