1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: Finite.card_pos_iff
File: Mathlib/Data/Finite/Card.lean

tactic: haveI := Fintype.ofFinite α
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : Finite α
⊢ 0 < Nat.card α ↔ Nonempty α
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : Finite α
this : Fintype α
⊢ 0 < Nat.card α ↔ Nonempty α

tactic: rw [Nat.card_eq_fintype_card, Fintype.card_pos_iff]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : Finite α
this : Fintype α
⊢ 0 < Nat.card α ↔ Nonempty α
state_after: no goals
Theorem: iSup₂_inf_eq
File: Mathlib/Order/CompleteBooleanAlgebra.lean

tactic: simp only [iSup_inf_eq]
state_before: α : Type u
β : Type v
ι : Sort w
κ : ι → Sort w'
inst✝ : Frame α
s t : Set α
a✝ b : α
f : (i : ι) → κ i → α
a : α
⊢ (⨆ i, ⨆ j, f i j) ⊓ a = ⨆ i, ⨆ j, f i j ⊓ a
state_after: no goals
Theorem: Set.infinite_of_forall_exists_gt
File: Mathlib/Data/Set/Finite.lean

tactic: inhabit α
state_before: α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝ t : Set α
inst✝¹ : Preorder α
inst✝ : Nonempty α
s : Set α
h : ∀ (a : α), ∃ b ∈ s, a < b
⊢ s.Infinite
state_after: α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝ t : Set α
inst✝¹ : Preorder α
inst✝ : Nonempty α
s : Set α
h : ∀ (a : α), ∃ b ∈ s, a < b
inhabited_h : Inhabited α
⊢ s.Infinite

tactic: set f : ℕ → α := fun n => Nat.recOn n (h default).choose fun _ a => (h a).choose
state_before: α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝ t : Set α
inst✝¹ : Preorder α
inst✝ : Nonempty α
s : Set α
h : ∀ (a : α), ∃ b ∈ s, a < b
inhabited_h : Inhabited α
⊢ s.Infinite
state_after: α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝ t : Set α
inst✝¹ : Preorder α
inst✝ : Nonempty α
s : Set α
h : ∀ (a : α), ∃ b ∈ s, a < b
inhabited_h : Inhabited α
f : ℕ → α := fun n => Nat.recOn n ⋯.choose fun x a => ⋯.choose
⊢ s.Infinite

tactic: have hf : ∀ n, f n ∈ s := by rintro (_ | _) <;> exact (h _).choose_spec.1
state_before: α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝ t : Set α
inst✝¹ : Preorder α
inst✝ : Nonempty α
s : Set α
h : ∀ (a : α), ∃ b ∈ s, a < b
inhabited_h : Inhabited α
f : ℕ → α := fun n => Nat.recOn n ⋯.choose fun x a => ⋯.choose
⊢ s.Infinite
state_after: α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝ t : Set α
inst✝¹ : Preorder α
inst✝ : Nonempty α
s : Set α
h : ∀ (a : α), ∃ b ∈ s, a < b
inhabited_h : Inhabited α
f : ℕ → α := fun n => Nat.recOn n ⋯.choose fun x a => ⋯.choose
hf : ∀ (n : ℕ), f n ∈ s
⊢ s.Infinite

tactic: exact infinite_of_injective_forall_mem
  (strictMono_nat_of_lt_succ fun n => (h _).choose_spec.2).injective hf
state_before: α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝ t : Set α
inst✝¹ : Preorder α
inst✝ : Nonempty α
s : Set α
h : ∀ (a : α), ∃ b ∈ s, a < b
inhabited_h : Inhabited α
f : ℕ → α := fun n => Nat.recOn n ⋯.choose fun x a => ⋯.choose
hf : ∀ (n : ℕ), f n ∈ s
⊢ s.Infinite
state_after: no goals

tactic: rintro (_ | _) <;> exact (h _).choose_spec.1
state_before: α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝ t : Set α
inst✝¹ : Preorder α
inst✝ : Nonempty α
s : Set α
h : ∀ (a : α), ∃ b ∈ s, a < b
inhabited_h : Inhabited α
f : ℕ → α := fun n => Nat.recOn n ⋯.choose fun x a => ⋯.choose
⊢ ∀ (n : ℕ), f n ∈ s
state_after: no goals
Theorem: Ordinal.nfp_mul_one
File: Mathlib/SetTheory/Ordinal/FixedPoint.lean

tactic: rw [← sup_iterate_eq_nfp, ← sup_opow_nat]
state_before: a : Ordinal.{u_1}
ha : 0 < a
⊢ nfp (fun x => a * x) 1 = a ^ ω
state_after: a : Ordinal.{u_1}
ha : 0 < a
⊢ (fun a_1 => sup fun n => (fun x => a * x)^[n] a_1) 1 = sup fun n => a ^ ↑n

a : Ordinal.{u_1}
ha : 0 < a
⊢ 0 < a

tactic: dsimp
state_before: a : Ordinal.{u_1}
ha : 0 < a
⊢ (fun a_1 => sup fun n => (fun x => a * x)^[n] a_1) 1 = sup fun n => a ^ ↑n
state_after: a : Ordinal.{u_1}
ha : 0 < a
⊢ (sup fun n => (fun x => a * x)^[n] 1) = sup fun n => a ^ ↑n

tactic: congr
state_before: a : Ordinal.{u_1}
ha : 0 < a
⊢ (sup fun n => (fun x => a * x)^[n] 1) = sup fun n => a ^ ↑n
state_after: case e_f
a : Ordinal.{u_1}
ha : 0 < a
⊢ (fun n => (fun x => a * x)^[n] 1) = fun n => a ^ ↑n

tactic: funext n
state_before: case e_f
a : Ordinal.{u_1}
ha : 0 < a
⊢ (fun n => (fun x => a * x)^[n] 1) = fun n => a ^ ↑n
state_after: case e_f.h
a : Ordinal.{u_1}
ha : 0 < a
n : ℕ
⊢ (fun x => a * x)^[n] 1 = a ^ ↑n

tactic: induction' n with n hn
state_before: case e_f.h
a : Ordinal.{u_1}
ha : 0 < a
n : ℕ
⊢ (fun x => a * x)^[n] 1 = a ^ ↑n
state_after: case e_f.h.zero
a : Ordinal.{u_1}
ha : 0 < a
⊢ (fun x => a * x)^[0] 1 = a ^ ↑0

case e_f.h.succ
a : Ordinal.{u_1}
ha : 0 < a
n : ℕ
hn : (fun x => a * x)^[n] 1 = a ^ ↑n
⊢ (fun x => a * x)^[n + 1] 1 = a ^ ↑(n + 1)

tactic: rw [iterate_succ_apply', Nat.add_comm, Nat.cast_add, Nat.cast_one, opow_add, opow_one, hn]
state_before: case e_f.h.succ
a : Ordinal.{u_1}
ha : 0 < a
n : ℕ
hn : (fun x => a * x)^[n] 1 = a ^ ↑n
⊢ (fun x => a * x)^[n + 1] 1 = a ^ ↑(n + 1)
state_after: no goals

tactic: rw [Nat.cast_zero, opow_zero, iterate_zero_apply]
state_before: case e_f.h.zero
a : Ordinal.{u_1}
ha : 0 < a
⊢ (fun x => a * x)^[0] 1 = a ^ ↑0
state_after: no goals

tactic: exact ha
state_before: a : Ordinal.{u_1}
ha : 0 < a
⊢ 0 < a
state_after: no goals
Theorem: EReal.preimage_coe_Ici
File: Mathlib/Data/Real/EReal.lean

tactic: change (WithBot.some ∘ WithTop.some) ⁻¹' (Ici (WithBot.some (WithTop.some x))) = _
state_before: x : ℝ
⊢ Real.toEReal ⁻¹' Ici ↑x = Ici x
state_after: x : ℝ
⊢ WithBot.some ∘ WithTop.some ⁻¹' Ici ↑↑x = Ici x

tactic: refine preimage_comp.trans ?_
state_before: x : ℝ
⊢ WithBot.some ∘ WithTop.some ⁻¹' Ici ↑↑x = Ici x
state_after: x : ℝ
⊢ WithTop.some ⁻¹' (WithBot.some ⁻¹' Ici ↑↑x) = Ici x

tactic: simp only [WithBot.preimage_coe_Ici, WithTop.preimage_coe_Ici]
state_before: x : ℝ
⊢ WithTop.some ⁻¹' (WithBot.some ⁻¹' Ici ↑↑x) = Ici x
state_after: no goals
Theorem: ae_not_liouvilleWith
File: Mathlib/NumberTheory/Liouville/Measure.lean

tactic: simpa only [ae_iff, not_forall, Classical.not_not, setOf_exists] using
  volume_iUnion_setOf_liouvilleWith
state_before: ⊢ ∀ᵐ (x : ℝ), ∀ p > 2, ¬LiouvilleWith p x
state_after: no goals
Theorem: Rat.sub_eq_add_neg
File: .lake/packages/batteries/Batteries/Data/Rat/Lemmas.lean

tactic: simp [add_def, sub_def, Int.neg_mul, Int.sub_eq_add_neg]
state_before: a b : Rat
⊢ a - b = a + -b
state_after: no goals
Theorem: Turing.Tape.map_mk'
File: Mathlib/Computability/TuringMachine.lean

tactic: simp only [Tape.mk', Tape.map, ListBlank.head_map, eq_self_iff_true, and_self_iff,
  ListBlank.tail_map]
state_before: Γ : Type u_1
Γ' : Type u_2
inst✝¹ : Inhabited Γ
inst✝ : Inhabited Γ'
f : PointedMap Γ Γ'
L R : ListBlank Γ
⊢ map f (mk' L R) = mk' (ListBlank.map f L) (ListBlank.map f R)
state_after: no goals
Theorem: Polynomial.irreducible_mul_leadingCoeff_inv
File: Mathlib/Algebra/Polynomial/Degree/Lemmas.lean

tactic: by_cases hp0 : p = 0
state_before: R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
K : Type u_1
inst✝ : DivisionRing K
p : K[X]
⊢ Irreducible (p * C p.leadingCoeff⁻¹) ↔ Irreducible p
state_after: case pos
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
K : Type u_1
inst✝ : DivisionRing K
p : K[X]
hp0 : p = 0
⊢ Irreducible (p * C p.leadingCoeff⁻¹) ↔ Irreducible p

case neg
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
K : Type u_1
inst✝ : DivisionRing K
p : K[X]
hp0 : ¬p = 0
⊢ Irreducible (p * C p.leadingCoeff⁻¹) ↔ Irreducible p

tactic: exact irreducible_mul_isUnit
  (isUnit_C.mpr (IsUnit.mk0 _ (inv_ne_zero (leadingCoeff_ne_zero.mpr hp0))))
state_before: case neg
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
K : Type u_1
inst✝ : DivisionRing K
p : K[X]
hp0 : ¬p = 0
⊢ Irreducible (p * C p.leadingCoeff⁻¹) ↔ Irreducible p
state_after: no goals

tactic: simp [hp0]
state_before: case pos
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
K : Type u_1
inst✝ : DivisionRing K
p : K[X]
hp0 : p = 0
⊢ Irreducible (p * C p.leadingCoeff⁻¹) ↔ Irreducible p
state_after: no goals
Theorem: Cubic.of_c_eq_zero
File: Mathlib/Algebra/CubicDiscriminant.lean

tactic: rw [of_b_eq_zero ha hb, hc, C_0, zero_mul, zero_add]
state_before: R : Type u_1
S : Type u_2
F : Type u_3
K : Type u_4
P Q : Cubic R
a b c d a' b' c' d' : R
inst✝ : Semiring R
ha : P.a = 0
hb : P.b = 0
hc : P.c = 0
⊢ P.toPoly = C P.d
state_after: no goals
Theorem: Function.Antiperiodic.neg
File: Mathlib/Algebra/Periodic.lean

tactic: simpa only [sub_eq_add_neg, Antiperiodic] using h.sub_eq
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
f g : α → β
c c₁ c₂ x : α
inst✝¹ : AddGroup α
inst✝ : InvolutiveNeg β
h : Antiperiodic f c
⊢ Antiperiodic f (-c)
state_after: no goals
Theorem: EuclideanGeometry.cos_oangle_right_mul_dist_of_oangle_eq_pi_div_two
File: Mathlib/Geometry/Euclidean/Angle/Oriented/RightAngle.lean

tactic: have hs : (∡ p₂ p₃ p₁).sign = 1 := by rw [oangle_rotate_sign, h, Real.Angle.sign_coe_pi_div_two]
state_before: V : Type u_1
P : Type u_2
inst✝⁴ : NormedAddCommGroup V
inst✝³ : InnerProductSpace ℝ V
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor V P
hd2 : Fact (finrank ℝ V = 2)
inst✝ : Module.Oriented ℝ V (Fin 2)
p₁ p₂ p₃ : P
h : ∡ p₁ p₂ p₃ = ↑(π / 2)
⊢ (∡ p₂ p₃ p₁).cos * dist p₁ p₃ = dist p₃ p₂
state_after: V : Type u_1
P : Type u_2
inst✝⁴ : NormedAddCommGroup V
inst✝³ : InnerProductSpace ℝ V
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor V P
hd2 : Fact (finrank ℝ V = 2)
inst✝ : Module.Oriented ℝ V (Fin 2)
p₁ p₂ p₃ : P
h : ∡ p₁ p₂ p₃ = ↑(π / 2)
hs : (∡ p₂ p₃ p₁).sign = 1
⊢ (∡ p₂ p₃ p₁).cos * dist p₁ p₃ = dist p₃ p₂

tactic: rw [oangle_eq_angle_of_sign_eq_one hs, Real.Angle.cos_coe,
  cos_angle_mul_dist_of_angle_eq_pi_div_two (angle_eq_pi_div_two_of_oangle_eq_pi_div_two h)]
state_before: V : Type u_1
P : Type u_2
inst✝⁴ : NormedAddCommGroup V
inst✝³ : InnerProductSpace ℝ V
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor V P
hd2 : Fact (finrank ℝ V = 2)
inst✝ : Module.Oriented ℝ V (Fin 2)
p₁ p₂ p₃ : P
h : ∡ p₁ p₂ p₃ = ↑(π / 2)
hs : (∡ p₂ p₃ p₁).sign = 1
⊢ (∡ p₂ p₃ p₁).cos * dist p₁ p₃ = dist p₃ p₂
state_after: no goals

tactic: rw [oangle_rotate_sign, h, Real.Angle.sign_coe_pi_div_two]
state_before: V : Type u_1
P : Type u_2
inst✝⁴ : NormedAddCommGroup V
inst✝³ : InnerProductSpace ℝ V
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor V P
hd2 : Fact (finrank ℝ V = 2)
inst✝ : Module.Oriented ℝ V (Fin 2)
p₁ p₂ p₃ : P
h : ∡ p₁ p₂ p₃ = ↑(π / 2)
⊢ (∡ p₂ p₃ p₁).sign = 1
state_after: no goals
Theorem: Int.isSquare_natCast_iff
File: Mathlib/Algebra/Ring/Int.lean

tactic: constructor <;> rintro ⟨x, h⟩
state_before: m n✝ : ℤ
n : ℕ
⊢ IsSquare ↑n ↔ IsSquare n
state_after: case mp.intro
m n✝ : ℤ
n : ℕ
x : ℤ
h : ↑n = x * x
⊢ IsSquare n

case mpr.intro
m n✝ : ℤ
n x : ℕ
h : n = x * x
⊢ IsSquare ↑n

tactic: exact ⟨x.natAbs, (natAbs_mul_natAbs_eq h.symm).symm⟩
state_before: case mp.intro
m n✝ : ℤ
n : ℕ
x : ℤ
h : ↑n = x * x
⊢ IsSquare n
state_after: no goals

tactic: exact ⟨x, mod_cast h⟩
state_before: case mpr.intro
m n✝ : ℤ
n x : ℕ
h : n = x * x
⊢ IsSquare ↑n
state_after: no goals
Theorem: AddSubgroup.intCast_mem_zmultiples_one
File: Mathlib/Algebra/Group/Subgroup/ZPowers.lean

tactic: simp
state_before: G : Type u_1
inst✝³ : Group G
A : Type u_2
inst✝² : AddGroup A
N : Type u_3
inst✝¹ : Group N
R : Type u_4
inst✝ : Ring R
r : R
k : ℤ
⊢ (fun x => x • 1) k = ↑k
state_after: no goals
Theorem: eq_one_of_mul_right
File: Mathlib/Algebra/Group/Units.lean

tactic: rwa [mul_comm]
state_before: α : Type u
inst✝¹ : CommMonoid α
inst✝ : Subsingleton αˣ
a b : α
h : a * b = 1
⊢ b * a = 1
state_after: no goals
Theorem: CategoryTheory.Bicategory.leftUnitor_inv_naturality
File: Mathlib/CategoryTheory/Bicategory/Basic.lean

tactic: simp
state_before: B : Type u
inst✝ : Bicategory B
a b c d e : B
f g : a ⟶ b
η : f ⟶ g
⊢ η ≫ (λ_ g).inv = (λ_ f).inv ≫ 𝟙 a ◁ η
state_after: no goals
Theorem: Complex.continuous_cos
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Basic.lean

tactic: change Continuous fun z => (exp (z * I) + exp (-z * I)) / 2
state_before: ⊢ Continuous cos
state_after: ⊢ Continuous fun z => (cexp (z * I) + cexp (-z * I)) / 2

tactic: continuity
state_before: ⊢ Continuous fun z => (cexp (z * I) + cexp (-z * I)) / 2
state_after: no goals
Theorem: slope_same
File: Mathlib/LinearAlgebra/AffineSpace/Slope.lean

tactic: rw [slope, sub_self, inv_zero, zero_smul]
state_before: k : Type u_1
E : Type u_2
PE : Type u_3
inst✝³ : Field k
inst✝² : AddCommGroup E
inst✝¹ : Module k E
inst✝ : AddTorsor E PE
f : k → PE
a : k
⊢ slope f a a = 0
state_after: no goals
Theorem: Batteries.RBSet.ModifyWF.of_eq
File: .lake/packages/batteries/Batteries/Data/RBMap/Alter.lean

tactic: refine ⟨.modify ?_ t.2⟩
state_before: α : Type u_1
cmp : α → α → Ordering
cut : α → Ordering
f : α → α
t : RBSet α cmp
H : ∀ {x : α}, RBNode.find? cut t.val = some x → cmpEq cmp (f x) x
⊢ t.ModifyWF cut f
state_after: α : Type u_1
cmp : α → α → Ordering
cut : α → Ordering
f : α → α
t : RBSet α cmp
H : ∀ {x : α}, RBNode.find? cut t.val = some x → cmpEq cmp (f x) x
⊢ OnRoot (fun x => cmpEq cmp (f x) x) (zoom cut t.val).fst

tactic: revert H
state_before: α : Type u_1
cmp : α → α → Ordering
cut : α → Ordering
f : α → α
t : RBSet α cmp
H : ∀ {x : α}, RBNode.find? cut t.val = some x → cmpEq cmp (f x) x
⊢ OnRoot (fun x => cmpEq cmp (f x) x) (zoom cut t.val).fst
state_after: α : Type u_1
cmp : α → α → Ordering
cut : α → Ordering
f : α → α
t : RBSet α cmp
⊢ (∀ {x : α}, RBNode.find? cut t.val = some x → cmpEq cmp (f x) x) →
    OnRoot (fun x => cmpEq cmp (f x) x) (zoom cut t.val).fst

tactic: rw [find?_eq_zoom]
state_before: α : Type u_1
cmp : α → α → Ordering
cut : α → Ordering
f : α → α
t : RBSet α cmp
⊢ (∀ {x : α}, RBNode.find? cut t.val = some x → cmpEq cmp (f x) x) →
    OnRoot (fun x => cmpEq cmp (f x) x) (zoom cut t.val).fst
state_after: α : Type u_1
cmp : α → α → Ordering
cut : α → Ordering
f : α → α
t : RBSet α cmp
⊢ (∀ {x : α}, (zoom cut t.val).fst.root? = some x → cmpEq cmp (f x) x) →
    OnRoot (fun x => cmpEq cmp (f x) x) (zoom cut t.val).fst

tactic: cases (t.1.zoom cut).1 <;> intro H <;> [trivial; exact H rfl]
state_before: α : Type u_1
cmp : α → α → Ordering
cut : α → Ordering
f : α → α
t : RBSet α cmp
⊢ (∀ {x : α}, (zoom cut t.val).fst.root? = some x → cmpEq cmp (f x) x) →
    OnRoot (fun x => cmpEq cmp (f x) x) (zoom cut t.val).fst
state_after: no goals
Theorem: LieModule.Weight.IsZero.neg
File: Mathlib/Algebra/Lie/Weights/Killing.lean

tactic: ext
state_before: R : Type u_1
K : Type u_2
L : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : LieRing L
inst✝⁶ : LieAlgebra R L
inst✝⁵ : Field K
inst✝⁴ : LieAlgebra K L
inst✝³ : FiniteDimensional K L
inst✝² : IsKilling K L
H : LieSubalgebra K L
inst✝¹ : H.IsCartanSubalgebra
inst✝ : IsTriangularizable K (↥H) L
α : Weight K (↥H) L
h : α.IsZero
⊢ (-α).IsZero
state_after: case h
R : Type u_1
K : Type u_2
L : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : LieRing L
inst✝⁶ : LieAlgebra R L
inst✝⁵ : Field K
inst✝⁴ : LieAlgebra K L
inst✝³ : FiniteDimensional K L
inst✝² : IsKilling K L
H : LieSubalgebra K L
inst✝¹ : H.IsCartanSubalgebra
inst✝ : IsTriangularizable K (↥H) L
α : Weight K (↥H) L
h : α.IsZero
x✝ : ↥H
⊢ (-α) x✝ = 0 x✝

tactic: rw [coe_neg, h, neg_zero]
state_before: case h
R : Type u_1
K : Type u_2
L : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : LieRing L
inst✝⁶ : LieAlgebra R L
inst✝⁵ : Field K
inst✝⁴ : LieAlgebra K L
inst✝³ : FiniteDimensional K L
inst✝² : IsKilling K L
H : LieSubalgebra K L
inst✝¹ : H.IsCartanSubalgebra
inst✝ : IsTriangularizable K (↥H) L
α : Weight K (↥H) L
h : α.IsZero
x✝ : ↥H
⊢ (-α) x✝ = 0 x✝
state_after: no goals
Theorem: MeasureTheory.measurePreserving_piFinTwo
File: Mathlib/MeasureTheory/Constructions/Pi.lean

tactic: refine ⟨MeasurableEquiv.measurable _, (Measure.prod_eq fun s t _ _ => ?_).symm⟩
state_before: ι : Type u_1
ι' : Type u_2
α✝ : ι → Type u_3
inst✝³ : Fintype ι
m✝¹ : (i : ι) → OuterMeasure (α✝ i)
m✝ : (i : ι) → MeasurableSpace (α✝ i)
μ✝ : (i : ι) → Measure (α✝ i)
inst✝² : ∀ (i : ι), SigmaFinite (μ✝ i)
inst✝¹ : Fintype ι'
α : Fin 2 → Type u
m : (i : Fin 2) → MeasurableSpace (α i)
μ : (i : Fin 2) → Measure (α i)
inst✝ : ∀ (i : Fin 2), SigmaFinite (μ i)
⊢ MeasurePreserving (⇑(MeasurableEquiv.piFinTwo α)) (Measure.pi μ) ((μ 0).prod (μ 1))
state_after: ι : Type u_1
ι' : Type u_2
α✝ : ι → Type u_3
inst✝³ : Fintype ι
m✝¹ : (i : ι) → OuterMeasure (α✝ i)
m✝ : (i : ι) → MeasurableSpace (α✝ i)
μ✝ : (i : ι) → Measure (α✝ i)
inst✝² : ∀ (i : ι), SigmaFinite (μ✝ i)
inst✝¹ : Fintype ι'
α : Fin 2 → Type u
m : (i : Fin 2) → MeasurableSpace (α i)
μ : (i : Fin 2) → Measure (α i)
inst✝ : ∀ (i : Fin 2), SigmaFinite (μ i)
s : Set (α 0)
t : Set (α 1)
x✝¹ : MeasurableSet s
x✝ : MeasurableSet t
⊢ (Measure.map (⇑(MeasurableEquiv.piFinTwo α)) (Measure.pi μ)) (s ×ˢ t) = (μ 0) s * (μ 1) t

tactic: rw [MeasurableEquiv.map_apply, MeasurableEquiv.piFinTwo_apply, Fin.preimage_apply_01_prod,
  Measure.pi_pi, Fin.prod_univ_two]
state_before: ι : Type u_1
ι' : Type u_2
α✝ : ι → Type u_3
inst✝³ : Fintype ι
m✝¹ : (i : ι) → OuterMeasure (α✝ i)
m✝ : (i : ι) → MeasurableSpace (α✝ i)
μ✝ : (i : ι) → Measure (α✝ i)
inst✝² : ∀ (i : ι), SigmaFinite (μ✝ i)
inst✝¹ : Fintype ι'
α : Fin 2 → Type u
m : (i : Fin 2) → MeasurableSpace (α i)
μ : (i : Fin 2) → Measure (α i)
inst✝ : ∀ (i : Fin 2), SigmaFinite (μ i)
s : Set (α 0)
t : Set (α 1)
x✝¹ : MeasurableSet s
x✝ : MeasurableSet t
⊢ (Measure.map (⇑(MeasurableEquiv.piFinTwo α)) (Measure.pi μ)) (s ×ˢ t) = (μ 0) s * (μ 1) t
state_after: ι : Type u_1
ι' : Type u_2
α✝ : ι → Type u_3
inst✝³ : Fintype ι
m✝¹ : (i : ι) → OuterMeasure (α✝ i)
m✝ : (i : ι) → MeasurableSpace (α✝ i)
μ✝ : (i : ι) → Measure (α✝ i)
inst✝² : ∀ (i : ι), SigmaFinite (μ✝ i)
inst✝¹ : Fintype ι'
α : Fin 2 → Type u
m : (i : Fin 2) → MeasurableSpace (α i)
μ : (i : Fin 2) → Measure (α i)
inst✝ : ∀ (i : Fin 2), SigmaFinite (μ i)
s : Set (α 0)
t : Set (α 1)
x✝¹ : MeasurableSet s
x✝ : MeasurableSet t
⊢ (μ 0) (Fin.cons s (Fin.cons t finZeroElim) 0) * (μ 1) (Fin.cons s (Fin.cons t finZeroElim) 1) = (μ 0) s * (μ 1) t

tactic: rfl
state_before: ι : Type u_1
ι' : Type u_2
α✝ : ι → Type u_3
inst✝³ : Fintype ι
m✝¹ : (i : ι) → OuterMeasure (α✝ i)
m✝ : (i : ι) → MeasurableSpace (α✝ i)
μ✝ : (i : ι) → Measure (α✝ i)
inst✝² : ∀ (i : ι), SigmaFinite (μ✝ i)
inst✝¹ : Fintype ι'
α : Fin 2 → Type u
m : (i : Fin 2) → MeasurableSpace (α i)
μ : (i : Fin 2) → Measure (α i)
inst✝ : ∀ (i : Fin 2), SigmaFinite (μ i)
s : Set (α 0)
t : Set (α 1)
x✝¹ : MeasurableSet s
x✝ : MeasurableSet t
⊢ (μ 0) (Fin.cons s (Fin.cons t finZeroElim) 0) * (μ 1) (Fin.cons s (Fin.cons t finZeroElim) 1) = (μ 0) s * (μ 1) t
state_after: no goals
Theorem: CategoryTheory.Functor.map_homCongr
File: Mathlib/CategoryTheory/Conj.lean

tactic: simp
state_before: C : Type u
inst✝¹ : Category.{v, u} C
D : Type u₁
inst✝ : Category.{v₁, u₁} D
F : C ⥤ D
X Y X₁ Y₁ : C
α : X ≅ X₁
β : Y ≅ Y₁
f : X ⟶ Y
⊢ F.map ((α.homCongr β) f) = ((F.mapIso α).homCongr (F.mapIso β)) (F.map f)
state_after: no goals
Theorem: Orientation.oangle_sign_add_smul_left
File: Mathlib/Geometry/Euclidean/Angle/Oriented/Basic.lean

tactic: simp_rw [o.oangle_rev y, Real.Angle.sign_neg, add_comm x, oangle_sign_smul_add_right]
state_before: V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x y : V
r : ℝ
⊢ (o.oangle (x + r • y) y).sign = (o.oangle x y).sign
state_after: no goals
Theorem: kstar_le_of_mul_le_right
File: Mathlib/Algebra/Order/Kleene.lean

tactic: simpa using kstar_mul_le hb
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
π : ι → Type u_4
inst✝ : KleeneAlgebra α
a b c : α
hb : 1 ≤ b
⊢ a * b ≤ b → a∗ ≤ b
state_after: no goals
Theorem: Matroid.Indep.basis_iff_forall_insert_dep
File: Mathlib/Data/Matroid/Basic.lean

tactic: rw [basis_iff', and_iff_right hIX, and_iff_right hI]
state_before: α : Type u_1
M : Matroid α
I X : Set α
hI : M.Indep I
hIX : I ⊆ X
⊢ M.Basis I X ↔ ∀ e ∈ X \ I, M.Dep (insert e I)
state_after: α : Type u_1
M : Matroid α
I X : Set α
hI : M.Indep I
hIX : I ⊆ X
⊢ (∀ (J : Set α), M.Indep J → I ⊆ J → J ⊆ X → I = J) ∧ X ⊆ M.E ↔ ∀ e ∈ X \ I, M.Dep (insert e I)

tactic: refine ⟨fun h e he ↦ ⟨fun hi ↦ he.2 ?_, insert_subset (h.2 he.1) hI.subset_ground⟩,
  fun h ↦ ⟨fun J hJ hIJ hJX ↦ hIJ.antisymm (fun e heJ ↦ by_contra (fun heI ↦ ?_)), ?_⟩⟩
state_before: α : Type u_1
M : Matroid α
I X : Set α
hI : M.Indep I
hIX : I ⊆ X
⊢ (∀ (J : Set α), M.Indep J → I ⊆ J → J ⊆ X → I = J) ∧ X ⊆ M.E ↔ ∀ e ∈ X \ I, M.Dep (insert e I)
state_after: case refine_1
α : Type u_1
M : Matroid α
I X : Set α
hI : M.Indep I
hIX : I ⊆ X
h : (∀ (J : Set α), M.Indep J → I ⊆ J → J ⊆ X → I = J) ∧ X ⊆ M.E
e : α
he : e ∈ X \ I
hi : M.Indep (insert e I)
⊢ e ∈ I

case refine_2
α : Type u_1
M : Matroid α
I X : Set α
hI : M.Indep I
hIX : I ⊆ X
h : ∀ e ∈ X \ I, M.Dep (insert e I)
J : Set α
hJ : M.Indep J
hIJ : I ⊆ J
hJX : J ⊆ X
e : α
heJ : e ∈ J
heI : e ∉ I
⊢ False

case refine_3
α : Type u_1
M : Matroid α
I X : Set α
hI : M.Indep I
hIX : I ⊆ X
h : ∀ e ∈ X \ I, M.Dep (insert e I)
⊢ X ⊆ M.E

tactic: rw [← diff_union_of_subset hIX, union_subset_iff, and_iff_left hI.subset_ground]
state_before: case refine_3
α : Type u_1
M : Matroid α
I X : Set α
hI : M.Indep I
hIX : I ⊆ X
h : ∀ e ∈ X \ I, M.Dep (insert e I)
⊢ X ⊆ M.E
state_after: case refine_3
α : Type u_1
M : Matroid α
I X : Set α
hI : M.Indep I
hIX : I ⊆ X
h : ∀ e ∈ X \ I, M.Dep (insert e I)
⊢ X \ I ⊆ M.E

tactic: exact fun e he ↦ (h e he).subset_ground (mem_insert _ _)
state_before: case refine_3
α : Type u_1
M : Matroid α
I X : Set α
hI : M.Indep I
hIX : I ⊆ X
h : ∀ e ∈ X \ I, M.Dep (insert e I)
⊢ X \ I ⊆ M.E
state_after: no goals

tactic: exact (h.1 _ hi (subset_insert _ _) (insert_subset he.1 hIX)).symm.subset (mem_insert e I)
state_before: case refine_1
α : Type u_1
M : Matroid α
I X : Set α
hI : M.Indep I
hIX : I ⊆ X
h : (∀ (J : Set α), M.Indep J → I ⊆ J → J ⊆ X → I = J) ∧ X ⊆ M.E
e : α
he : e ∈ X \ I
hi : M.Indep (insert e I)
⊢ e ∈ I
state_after: no goals

tactic: exact (h e ⟨hJX heJ, heI⟩).not_indep (hJ.subset (insert_subset heJ hIJ))
state_before: case refine_2
α : Type u_1
M : Matroid α
I X : Set α
hI : M.Indep I
hIX : I ⊆ X
h : ∀ e ∈ X \ I, M.Dep (insert e I)
J : Set α
hJ : M.Indep J
hIJ : I ⊆ J
hJX : J ⊆ X
e : α
heJ : e ∈ J
heI : e ∉ I
⊢ False
state_after: no goals