ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: EuclideanGeometry.dist_sq_eq_dist_sq_add_dist_sq_sub_two_mul_dist_mul_dist_mul_cos_angle
File: Mathlib/Geometry/Euclidean/Triangle.lean

Proof steps:
state_before: V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p1 p2 p3 : P
⊢ dist p1 p3 * dist p1 p3 =
    dist p1 p2 * dist p1 p2 + dist p3 p2 * dist p3 p2 - 2 * dist p1 p2 * dist p3 p2 * Real.cos (∠ p1 p2 p3)
state_after: V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p1 p2 p3 : P
⊢ ‖p1 -ᵥ p3‖ * ‖p1 -ᵥ p3‖ =
    ‖p1 -ᵥ p2‖ * ‖p1 -ᵥ p2‖ + ‖p3 -ᵥ p2‖ * ‖p3 -ᵥ p2‖ - 2 * ‖p1 -ᵥ p2‖ * ‖p3 -ᵥ p2‖ * Real.cos (∠ p1 p2 p3)
tactic: rw [dist_eq_norm_vsub V p1 p3, dist_eq_norm_vsub V p1 p2, dist_eq_norm_vsub V p3 p2]
state_before: V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p1 p2 p3 : P
⊢ ‖p1 -ᵥ p3‖ * ‖p1 -ᵥ p3‖ =
    ‖p1 -ᵥ p2‖ * ‖p1 -ᵥ p2‖ + ‖p3 -ᵥ p2‖ * ‖p3 -ᵥ p2‖ - 2 * ‖p1 -ᵥ p2‖ * ‖p3 -ᵥ p2‖ * Real.cos (∠ p1 p2 p3)
state_after: V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p1 p2 p3 : P
⊢ ‖p1 -ᵥ p3‖ * ‖p1 -ᵥ p3‖ =
    ‖p1 -ᵥ p2‖ * ‖p1 -ᵥ p2‖ + ‖p3 -ᵥ p2‖ * ‖p3 -ᵥ p2‖ -
      2 * ‖p1 -ᵥ p2‖ * ‖p3 -ᵥ p2‖ * Real.cos (InnerProductGeometry.angle (p1 -ᵥ p2) (p3 -ᵥ p2))
tactic: unfold angle
state_before: V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p1 p2 p3 : P
⊢ ‖p1 -ᵥ p3‖ * ‖p1 -ᵥ p3‖ =
    ‖p1 -ᵥ p2‖ * ‖p1 -ᵥ p2‖ + ‖p3 -ᵥ p2‖ * ‖p3 -ᵥ p2‖ -
      2 * ‖p1 -ᵥ p2‖ * ‖p3 -ᵥ p2‖ * Real.cos (InnerProductGeometry.angle (p1 -ᵥ p2) (p3 -ᵥ p2))
state_after: case h.e'_2.h.e'_5.h.e'_3
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p1 p2 p3 : P
⊢ p1 -ᵥ p3 = p1 -ᵥ p2 - (p3 -ᵥ p2)

case h.e'_2.h.e'_6.h.e'_3
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p1 p2 p3 : P
⊢ p1 -ᵥ p3 = p1 -ᵥ p2 - (p3 -ᵥ p2)
tactic: convert norm_sub_sq_eq_norm_sq_add_norm_sq_sub_two_mul_norm_mul_norm_mul_cos_angle
    (p1 -ᵥ p2 : V) (p3 -ᵥ p2 : V)
Theorem: Real.Angle.sign_two_nsmul_eq_sign_iff
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Angle.lean

Proof steps:
state_before: θ : Angle
⊢ (2 • θ).sign = θ.sign ↔ θ = ↑π ∨ |θ.toReal| < π / 2
state_after: case pos
θ : Angle
hpi : θ = ↑π
⊢ (2 • θ).sign = θ.sign ↔ θ = ↑π ∨ |θ.toReal| < π / 2

case neg
θ : Angle
hpi : ¬θ = ↑π
⊢ (2 • θ).sign = θ.sign ↔ θ = ↑π ∨ |θ.toReal| < π / 2
tactic: by_cases hpi : θ = π
state_before: case neg
θ : Angle
hpi : ¬θ = ↑π
⊢ (2 • θ).sign = θ.sign ↔ θ = ↑π ∨ |θ.toReal| < π / 2
state_after: case neg
θ : Angle
hpi : ¬θ = ↑π
⊢ (2 • θ).sign = θ.sign ↔ |θ.toReal| < π / 2
tactic: rw [or_iff_right hpi]
state_before: case neg
θ : Angle
hpi : ¬θ = ↑π
⊢ (2 • θ).sign = θ.sign ↔ |θ.toReal| < π / 2
state_after: case neg.refine_1
θ : Angle
hpi : ¬θ = ↑π
h : (2 • θ).sign = θ.sign
⊢ |θ.toReal| < π / 2

case neg.refine_2
θ : Angle
hpi : ¬θ = ↑π
h : |θ.toReal| < π / 2
⊢ (2 • θ).sign = θ.sign
tactic: refine ⟨fun h => ?_, fun h => ?_⟩
Theorem: Filter.map_biInf_eq
File: Mathlib/Order/Filter/Basic.lean

Proof steps:
state_before: α : Type u
β : Type v
γ : Type w
δ : Type u_1
ι✝ : Sort x
l : Filter α
ι : Type w
f : ι → Filter α
m : α → β
p : ι → Prop
h : DirectedOn (f ⁻¹'o fun x x_1 => x ≥ x_1) {x | p x}
ne : ∃ i, p i
⊢ map m (⨅ i, ⨅ (_ : p i), f i) = ⨅ i, ⨅ (_ : p i), map m (f i)
state_after: α : Type u
β : Type v
γ : Type w
δ : Type u_1
ι✝ : Sort x
l : Filter α
ι : Type w
f : ι → Filter α
m : α → β
p : ι → Prop
h : DirectedOn (f ⁻¹'o fun x x_1 => x ≥ x_1) {x | p x}
ne : ∃ i, p i
this : Nonempty (Subtype p)
⊢ map m (⨅ i, ⨅ (_ : p i), f i) = ⨅ i, ⨅ (_ : p i), map m (f i)
tactic: haveI := nonempty_subtype.2 ne
state_before: α : Type u
β : Type v
γ : Type w
δ : Type u_1
ι✝ : Sort x
l : Filter α
ι : Type w
f : ι → Filter α
m : α → β
p : ι → Prop
h : DirectedOn (f ⁻¹'o fun x x_1 => x ≥ x_1) {x | p x}
ne : ∃ i, p i
this : Nonempty (Subtype p)
⊢ map m (⨅ i, ⨅ (_ : p i), f i) = ⨅ i, ⨅ (_ : p i), map m (f i)
state_after: α : Type u
β : Type v
γ : Type w
δ : Type u_1
ι✝ : Sort x
l : Filter α
ι : Type w
f : ι → Filter α
m : α → β
p : ι → Prop
h : DirectedOn (f ⁻¹'o fun x x_1 => x ≥ x_1) {x | p x}
ne : ∃ i, p i
this : Nonempty (Subtype p)
⊢ map m (⨅ x, f ↑x) = ⨅ x, map m (f ↑x)
tactic: simp only [iInf_subtype']
state_before: α : Type u
β : Type v
γ : Type w
δ : Type u_1
ι✝ : Sort x
l : Filter α
ι : Type w
f : ι → Filter α
m : α → β
p : ι → Prop
h : DirectedOn (f ⁻¹'o fun x x_1 => x ≥ x_1) {x | p x}
ne : ∃ i, p i
this : Nonempty (Subtype p)
⊢ map m (⨅ x, f ↑x) = ⨅ x, map m (f ↑x)
state_after: no goals
tactic: exact map_iInf_eq h.directed_val
Theorem: MeasureTheory.SignedMeasure.mutuallySingular_ennreal_iff
File: Mathlib/MeasureTheory/Decomposition/Jordan.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s : SignedMeasure α
μ : VectorMeasure α ℝ≥0∞
⊢ s ⟂ᵥ μ ↔ s.totalVariation ⟂ₘ μ.ennrealToMeasure
state_after: case mp
α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s : SignedMeasure α
μ : VectorMeasure α ℝ≥0∞
⊢ s ⟂ᵥ μ → s.totalVariation ⟂ₘ μ.ennrealToMeasure

case mpr
α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s : SignedMeasure α
μ : VectorMeasure α ℝ≥0∞
⊢ s.totalVariation ⟂ₘ μ.ennrealToMeasure → s ⟂ᵥ μ
tactic: constructor
Theorem: Affine.Simplex.range_face_points
File: Mathlib/LinearAlgebra/AffineSpace/Independent.lean

Proof steps:
state_before: k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
n : ℕ
s : Simplex k P n
fs : Finset (Fin (n + 1))
m : ℕ
h : fs.card = m + 1
⊢ Set.range (s.face h).points = s.points '' ↑fs
state_after: no goals
tactic: rw [face_points', Set.range_comp, Finset.range_orderEmbOfFin]
Theorem: FirstOrder.Language.Substructure.range_subtype
File: Mathlib/ModelTheory/Substructures.lean

Proof steps:
state_before: L : Language
M : Type w
N : Type u_1
P : Type u_2
inst✝² : L.Structure M
inst✝¹ : L.Structure N
inst✝ : L.Structure P
S✝ S : L.Substructure M
⊢ S.subtype.toHom.range = S
state_after: case h
L : Language
M : Type w
N : Type u_1
P : Type u_2
inst✝² : L.Structure M
inst✝¹ : L.Structure N
inst✝ : L.Structure P
S✝ S : L.Substructure M
x : M
⊢ x ∈ S.subtype.toHom.range ↔ x ∈ S
tactic: ext x
state_before: case h
L : Language
M : Type w
N : Type u_1
P : Type u_2
inst✝² : L.Structure M
inst✝¹ : L.Structure N
inst✝ : L.Structure P
S✝ S : L.Substructure M
x : M
⊢ x ∈ S.subtype.toHom.range ↔ x ∈ S
state_after: case h
L : Language
M : Type w
N : Type u_1
P : Type u_2
inst✝² : L.Structure M
inst✝¹ : L.Structure N
inst✝ : L.Structure P
S✝ S : L.Substructure M
x : M
⊢ (∃ y, ↑y = x) ↔ x ∈ S
tactic: simp only [Hom.mem_range, Embedding.coe_toHom, coeSubtype]
state_before: case h
L : Language
M : Type w
N : Type u_1
P : Type u_2
inst✝² : L.Structure M
inst✝¹ : L.Structure N
inst✝ : L.Structure P
S✝ S : L.Substructure M
x : M
⊢ (∃ y, ↑y = x) ↔ x ∈ S
state_after: case h
L : Language
M : Type w
N : Type u_1
P : Type u_2
inst✝² : L.Structure M
inst✝¹ : L.Structure N
inst✝ : L.Structure P
S✝ S : L.Substructure M
x : M
⊢ (∃ y, ↑y = x) → x ∈ S
tactic: refine ⟨?_, fun h => ⟨⟨x, h⟩, rfl⟩⟩
state_before: case h
L : Language
M : Type w
N : Type u_1
P : Type u_2
inst✝² : L.Structure M
inst✝¹ : L.Structure N
inst✝ : L.Structure P
S✝ S : L.Substructure M
x : M
⊢ (∃ y, ↑y = x) → x ∈ S
state_after: case h.intro.mk
L : Language
M : Type w
N : Type u_1
P : Type u_2
inst✝² : L.Structure M
inst✝¹ : L.Structure N
inst✝ : L.Structure P
S✝ S : L.Substructure M
y : M
hy : y ∈ S
⊢ ↑⟨y, hy⟩ ∈ S
tactic: rintro ⟨⟨y, hy⟩, rfl⟩
state_before: case h.intro.mk
L : Language
M : Type w
N : Type u_1
P : Type u_2
inst✝² : L.Structure M
inst✝¹ : L.Structure N
inst✝ : L.Structure P
S✝ S : L.Substructure M
y : M
hy : y ∈ S
⊢ ↑⟨y, hy⟩ ∈ S
state_after: no goals
tactic: exact hy
Theorem: OrderIso.preimage_Ioi
File: Mathlib/Order/Interval/Set/OrderIso.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝¹ : Preorder α
inst✝ : Preorder β
e : α ≃o β
b : β
⊢ ⇑e ⁻¹' Ioi b = Ioi (e.symm b)
state_after: case h
α : Type u_1
β : Type u_2
inst✝¹ : Preorder α
inst✝ : Preorder β
e : α ≃o β
b : β
x : α
⊢ x ∈ ⇑e ⁻¹' Ioi b ↔ x ∈ Ioi (e.symm b)
tactic: ext x
state_before: case h
α : Type u_1
β : Type u_2
inst✝¹ : Preorder α
inst✝ : Preorder β
e : α ≃o β
b : β
x : α
⊢ x ∈ ⇑e ⁻¹' Ioi b ↔ x ∈ Ioi (e.symm b)
state_after: no goals
tactic: simp [← e.lt_iff_lt]
Theorem: IsGroupHom.preimage
File: Mathlib/Deprecated/Subgroup.lean

Proof steps:
state_before: G : Type u_1
H : Type u_2
A : Type u_3
a a₁ a₂ b c : G
inst✝¹ : Group G
inst✝ : Group H
f : G → H
hf : IsGroupHom f
s : Set H
hs : IsSubgroup s
⊢ 1 ∈ f ⁻¹' s
state_after: no goals
tactic: simp [hf.map_one, hs.one_mem]
state_before: G : Type u_1
H : Type u_2
A : Type u_3
a a₁ a₂ b c : G
inst✝¹ : Group G
inst✝ : Group H
f : G → H
hf : IsGroupHom f
s : Set H
hs : IsSubgroup s
⊢ ∀ {a b : G}, a ∈ f ⁻¹' s → b ∈ f ⁻¹' s → a * b ∈ f ⁻¹' s
state_after: no goals
tactic: simp_all [hf.map_mul, hs.mul_mem]
state_before: G : Type u_1
H : Type u_2
A : Type u_3
a a₁ a₂ b c : G
inst✝¹ : Group G
inst✝ : Group H
f : G → H
hf : IsGroupHom f
s : Set H
hs : IsSubgroup s
⊢ ∀ {a : G}, a ∈ f ⁻¹' s → a⁻¹ ∈ f ⁻¹' s
state_after: no goals
tactic: simp_all [hf.map_inv]
Theorem: Wbtw.trans_sbtw_left
File: Mathlib/Analysis/Convex/Between.lean

Proof steps:
state_before: R : Type u_1
V : Type u_2
V' : Type u_3
P : Type u_4
P' : Type u_5
inst✝⁷ : OrderedRing R
inst✝⁶ : AddCommGroup V
inst✝⁵ : Module R V
inst✝⁴ : AddTorsor V P
inst✝³ : AddCommGroup V'
inst✝² : Module R V'
inst✝¹ : AddTorsor V' P'
inst✝ : NoZeroSMulDivisors R V
w x y z : P
h₁ : Wbtw R w y z
h₂ : Sbtw R w x y
⊢ Sbtw R w x z
state_after: R : Type u_1
V : Type u_2
V' : Type u_3
P : Type u_4
P' : Type u_5
inst✝⁷ : OrderedRing R
inst✝⁶ : AddCommGroup V
inst✝⁵ : Module R V
inst✝⁴ : AddTorsor V P
inst✝³ : AddCommGroup V'
inst✝² : Module R V'
inst✝¹ : AddTorsor V' P'
inst✝ : NoZeroSMulDivisors R V
w x y z : P
h₁ : Wbtw R w y z
h₂ : Sbtw R w x y
⊢ x ≠ z
tactic: refine ⟨h₁.trans_left h₂.wbtw, h₂.ne_left, ?_⟩
state_before: R : Type u_1
V : Type u_2
V' : Type u_3
P : Type u_4
P' : Type u_5
inst✝⁷ : OrderedRing R
inst✝⁶ : AddCommGroup V
inst✝⁵ : Module R V
inst✝⁴ : AddTorsor V P
inst✝³ : AddCommGroup V'
inst✝² : Module R V'
inst✝¹ : AddTorsor V' P'
inst✝ : NoZeroSMulDivisors R V
w x y z : P
h₁ : Wbtw R w y z
h₂ : Sbtw R w x y
⊢ x ≠ z
state_after: R : Type u_1
V : Type u_2
V' : Type u_3
P : Type u_4
P' : Type u_5
inst✝⁷ : OrderedRing R
inst✝⁶ : AddCommGroup V
inst✝⁵ : Module R V
inst✝⁴ : AddTorsor V P
inst✝³ : AddCommGroup V'
inst✝² : Module R V'
inst✝¹ : AddTorsor V' P'
inst✝ : NoZeroSMulDivisors R V
w x y : P
h₂ : Sbtw R w x y
h₁ : Wbtw R w y x
⊢ False
tactic: rintro rfl
state_before: R : Type u_1
V : Type u_2
V' : Type u_3
P : Type u_4
P' : Type u_5
inst✝⁷ : OrderedRing R
inst✝⁶ : AddCommGroup V
inst✝⁵ : Module R V
inst✝⁴ : AddTorsor V P
inst✝³ : AddCommGroup V'
inst✝² : Module R V'
inst✝¹ : AddTorsor V' P'
inst✝ : NoZeroSMulDivisors R V
w x y : P
h₂ : Sbtw R w x y
h₁ : Wbtw R w y x
⊢ False
state_after: no goals
tactic: exact h₂.right_ne ((wbtw_swap_right_iff R w).1 ⟨h₁, h₂.wbtw⟩)
Theorem: OrderEmbedding.birkhoffFinset_sup
File: Mathlib/Order/Birkhoff.lean

Proof steps:
state_before: α : Type u_1
inst✝⁴ : DistribLattice α
inst✝³ : OrderBot α
inst✝² : Fintype α
inst✝¹ : DecidablePred SupIrred
inst✝ : DecidableEq α
a b : α
⊢ birkhoffFinset (a ⊔ b) = birkhoffFinset a ∪ birkhoffFinset b
state_after: α : Type u_1
inst✝⁴ : DistribLattice α
inst✝³ : OrderBot α
inst✝² : Fintype α
inst✝¹ : DecidablePred SupIrred
inst✝ : DecidableEq α
a b : α
⊢ Fintype.finsetOrderIsoSet.symm.toOrderEmbedding (birkhoffSet (a ⊔ b)) =
    Fintype.finsetOrderIsoSet.symm.toOrderEmbedding (birkhoffSet a) ∪
      Fintype.finsetOrderIsoSet.symm.toOrderEmbedding (birkhoffSet b)
tactic: dsimp [OrderEmbedding.birkhoffFinset]
state_before: α : Type u_1
inst✝⁴ : DistribLattice α
inst✝³ : OrderBot α
inst✝² : Fintype α
inst✝¹ : DecidablePred SupIrred
inst✝ : DecidableEq α
a b : α
⊢ Fintype.finsetOrderIsoSet.symm.toOrderEmbedding (birkhoffSet (a ⊔ b)) =
    Fintype.finsetOrderIsoSet.symm.toOrderEmbedding (birkhoffSet a) ∪
      Fintype.finsetOrderIsoSet.symm.toOrderEmbedding (birkhoffSet b)
state_after: α : Type u_1
inst✝⁴ : DistribLattice α
inst✝³ : OrderBot α
inst✝² : Fintype α
inst✝¹ : DecidablePred SupIrred
inst✝ : DecidableEq α
a b : α
⊢ Fintype.finsetOrderIsoSet.symm (birkhoffSet a ∪ birkhoffSet b) =
    Fintype.finsetOrderIsoSet.symm (birkhoffSet a) ∪ Fintype.finsetOrderIsoSet.symm (birkhoffSet b)
tactic: rw [birkhoffSet_sup, OrderIso.coe_toOrderEmbedding]
state_before: α : Type u_1
inst✝⁴ : DistribLattice α
inst✝³ : OrderBot α
inst✝² : Fintype α
inst✝¹ : DecidablePred SupIrred
inst✝ : DecidableEq α
a b : α
⊢ Fintype.finsetOrderIsoSet.symm (birkhoffSet a ∪ birkhoffSet b) =
    Fintype.finsetOrderIsoSet.symm (birkhoffSet a) ∪ Fintype.finsetOrderIsoSet.symm (birkhoffSet b)
state_after: no goals
tactic: simp
Theorem: OnePoint.inseparable_iff
File: Mathlib/Topology/Compactification/OnePoint.lean

Proof steps:
state_before: X : Type u_1
inst✝ : TopologicalSpace X
s : Set (OnePoint X)
t : Set X
x y : OnePoint X
⊢ Inseparable x y ↔ x = ∞ ∧ y = ∞ ∨ ∃ x', x = ↑x' ∧ ∃ y', y = ↑y' ∧ Inseparable x' y'
state_after: no goals
tactic: induction x using OnePoint.rec <;> induction y using OnePoint.rec <;>
    simp [not_inseparable_infty_coe, not_inseparable_coe_infty, coe_eq_coe, Inseparable.refl]
Theorem: Matroid.exists_basis_subset_basis
File: Mathlib/Data/Matroid/Basic.lean

Proof steps:
state_before: α : Type u_1
M✝ : Matroid α
B I J X Y : Set α
e : α
M : Matroid α
hXY : X ⊆ Y
hY : autoParam (Y ⊆ M.E) _auto✝
⊢ ∃ I J, M.Basis I X ∧ M.Basis J Y ∧ I ⊆ J
state_after: case intro
α : Type u_1
M✝ : Matroid α
B I✝ J X Y : Set α
e : α
M : Matroid α
hXY : X ⊆ Y
hY : autoParam (Y ⊆ M.E) _auto✝
I : Set α
hI : M.Basis I X
⊢ ∃ I J, M.Basis I X ∧ M.Basis J Y ∧ I ⊆ J
tactic: obtain ⟨I, hI⟩ := M.exists_basis X (hXY.trans hY)
state_before: case intro
α : Type u_1
M✝ : Matroid α
B I✝ J X Y : Set α
e : α
M : Matroid α
hXY : X ⊆ Y
hY : autoParam (Y ⊆ M.E) _auto✝
I : Set α
hI : M.Basis I X
⊢ ∃ I J, M.Basis I X ∧ M.Basis J Y ∧ I ⊆ J
state_after: case intro.intro.intro
α : Type u_1
M✝ : Matroid α
B I✝ J✝ X Y : Set α
e : α
M : Matroid α
hXY : X ⊆ Y
hY : autoParam (Y ⊆ M.E) _auto✝
I : Set α
hI : M.Basis I X
J : Set α
hJ : M.Basis J Y
hIJ : I ⊆ J
⊢ ∃ I J, M.Basis I X ∧ M.Basis J Y ∧ I ⊆ J
tactic: obtain ⟨J, hJ, hIJ⟩ := hI.indep.subset_basis_of_subset (hI.subset.trans hXY)
state_before: case intro.intro.intro
α : Type u_1
M✝ : Matroid α
B I✝ J✝ X Y : Set α
e : α
M : Matroid α
hXY : X ⊆ Y
hY : autoParam (Y ⊆ M.E) _auto✝
I : Set α
hI : M.Basis I X
J : Set α
hJ : M.Basis J Y
hIJ : I ⊆ J
⊢ ∃ I J, M.Basis I X ∧ M.Basis J Y ∧ I ⊆ J
state_after: no goals
tactic: exact ⟨_, _, hI, hJ, hIJ⟩
Theorem: Array.SatisfiesM_mapIdxM
File: .lake/packages/batteries/Batteries/Data/Array/Monadic.lean

Proof steps:
state_before: m : Type u_1 → Type u_2
α : Type u_3
β : Type u_1
inst✝¹ : Monad m
inst✝ : LawfulMonad m
as : Array α
f : Fin as.size → α → m β
motive : Nat → Prop
h0 : motive 0
p : Fin as.size → β → Prop
hs : ∀ (i : Fin as.size), motive ↑i → SatisfiesM (fun x => p i x ∧ motive (↑i + 1)) (f i as[i])
⊢ SatisfiesM (fun arr => motive as.size ∧ ∃ eq, ∀ (i : Nat) (h : i < as.size), p ⟨i, h⟩ arr[i]) (as.mapIdxM f)
state_after: m : Type u_1 → Type u_2
α : Type u_3
β : Type u_1
inst✝¹ : Monad m
inst✝ : LawfulMonad m
as : Array α
f : Fin as.size → α → m β
motive : Nat → Prop
h0 : motive 0
p : Fin as.size → β → Prop
hs : ∀ (i : Fin as.size), motive ↑i → SatisfiesM (fun x => p i x ∧ motive (↑i + 1)) (f i as[i])
⊢ SatisfiesM (fun arr => motive as.size ∧ ∃ eq, ∀ (i : Nat) (h : i < as.size), p ⟨i, h⟩ arr[i])
    (mapIdxM.map as f as.size 0 ⋯ #[])
tactic: simp [mapIdxM]
state_before: m : Type u_1 → Type u_2
α : Type u_3
β : Type u_1
inst✝¹ : Monad m
inst✝ : LawfulMonad m
as : Array α
f : Fin as.size → α → m β
motive : Nat → Prop
h0 : motive 0
p : Fin as.size → β → Prop
hs : ∀ (i : Fin as.size), motive ↑i → SatisfiesM (fun x => p i x ∧ motive (↑i + 1)) (f i as[i])
⊢ SatisfiesM (fun arr => motive as.size ∧ ∃ eq, ∀ (i : Nat) (h : i < as.size), p ⟨i, h⟩ arr[i])
    (mapIdxM.map as f as.size 0 ⋯ #[])
state_after: no goals
tactic: exact go rfl nofun h0
Theorem: Nat.Partrec.Code.evaln_bound
File: Mathlib/Computability/PartrecCode.lean

Proof steps:
state_before: c : Code
n x : ℕ
h : x ∈ evaln 0 c n
⊢ n < 0
state_after: no goals
tactic: simp [evaln] at h
state_before: k : ℕ
c : Code
n x : ℕ
h : x ∈ evaln (k + 1) c n
⊢ n < k + 1
state_after: k : ℕ
c : Code
n x : ℕ
h : x ∈ evaln (k + 1) c n
⊢ ∀ {o : Option ℕ},
    (x ∈ do
        guard (n ≤ k)
        o) →
      n < k + 1
tactic: suffices ∀ {o : Option ℕ}, x ∈ do { guard (n ≤ k); o } → n < k + 1 by
      cases c <;> rw [evaln] at h <;> exact this h
state_before: k : ℕ
c : Code
n x : ℕ
h : x ∈ evaln (k + 1) c n
⊢ ∀ {o : Option ℕ},
    (x ∈ do
        guard (n ≤ k)
        o) →
      n < k + 1
state_after: no goals
tactic: simpa [Option.bind_eq_some] using Nat.lt_succ_of_le
Theorem: Module.isTrivialRelation_iff_vanishesTrivially
File: Mathlib/RingTheory/Flat/EquationalCriterion.lean

Proof steps:
state_before: R M : Type u
inst✝³ : CommRing R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
ι : Type u
inst✝ : Fintype ι
f : ι → R
x : ι → M
⊢ IsTrivialRelation f x ↔ VanishesTrivially R f x
state_after: no goals
tactic: simp only [IsTrivialRelation, VanishesTrivially, smul_eq_mul, mul_comm]
Theorem: multiplicity.multiplicity_add_eq_min
File: Mathlib/RingTheory/Multiplicity.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝¹ : Ring α
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
p a b : α
h : multiplicity p a ≠ multiplicity p b
⊢ multiplicity p (a + b) = min (multiplicity p a) (multiplicity p b)
state_after: case inl
α : Type u_1
β : Type u_2
inst✝¹ : Ring α
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
p a b : α
h : multiplicity p a ≠ multiplicity p b
hab : multiplicity p a < multiplicity p b
⊢ multiplicity p (a + b) = min (multiplicity p a) (multiplicity p b)

case inr.inl
α : Type u_1
β : Type u_2
inst✝¹ : Ring α
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
p a b : α
h : multiplicity p a ≠ multiplicity p b
hab : multiplicity p a = multiplicity p b
⊢ multiplicity p (a + b) = min (multiplicity p a) (multiplicity p b)

case inr.inr
α : Type u_1
β : Type u_2
inst✝¹ : Ring α
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
p a b : α
h : multiplicity p a ≠ multiplicity p b
hab : multiplicity p b < multiplicity p a
⊢ multiplicity p (a + b) = min (multiplicity p a) (multiplicity p b)
tactic: rcases lt_trichotomy (multiplicity p a) (multiplicity p b) with (hab | hab | hab)
Theorem: Matrix.blockDiagonal'_zero
File: Mathlib/Data/Matrix/Block.lean

Proof steps:
state_before: l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
p : Type u_5
q : Type u_6
m' : o → Type u_7
n' : o → Type u_8
p' : o → Type u_9
R : Type u_10
S : Type u_11
α : Type u_12
β : Type u_13
inst✝² : DecidableEq o
inst✝¹ : Zero α
inst✝ : Zero β
⊢ blockDiagonal' 0 = 0
state_after: case a
l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
p : Type u_5
q : Type u_6
m' : o → Type u_7
n' : o → Type u_8
p' : o → Type u_9
R : Type u_10
S : Type u_11
α : Type u_12
β : Type u_13
inst✝² : DecidableEq o
inst✝¹ : Zero α
inst✝ : Zero β
i✝ : (i : o) × m' i
j✝ : (i : o) × n' i
⊢ blockDiagonal' 0 i✝ j✝ = 0 i✝ j✝
tactic: ext
state_before: case a
l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
p : Type u_5
q : Type u_6
m' : o → Type u_7
n' : o → Type u_8
p' : o → Type u_9
R : Type u_10
S : Type u_11
α : Type u_12
β : Type u_13
inst✝² : DecidableEq o
inst✝¹ : Zero α
inst✝ : Zero β
i✝ : (i : o) × m' i
j✝ : (i : o) × n' i
⊢ blockDiagonal' 0 i✝ j✝ = 0 i✝ j✝
state_after: no goals
tactic: simp [blockDiagonal'_apply]
Theorem: Polynomial.eval_ofNat
File: Mathlib/Algebra/Polynomial/Eval.lean

Proof steps:
state_before: R : Type u
S : Type v
T : Type w
ι : Type y
a✝ b : R
m n✝ : ℕ
inst✝¹ : Semiring R
p q r : R[X]
x : R
n : ℕ
inst✝ : n.AtLeastTwo
a : R
⊢ eval a (OfNat.ofNat n) = OfNat.ofNat n
state_after: no goals
tactic: simp only [OfNat.ofNat, eval_natCast]
Theorem: CategoryTheory.Limits.hasCoproducts_of_finite_and_filtered
File: Mathlib/CategoryTheory/Limits/Constructions/Filtered.lean

Proof steps:
state_before: C : Type u
inst✝² : Category.{v, u} C
α✝ : Type w
inst✝¹ : HasFiniteCoproducts C
inst✝ : HasFilteredColimitsOfSize.{w, w, v, u} C
α : Type w
⊢ HasColimitsOfShape (Discrete α) C
state_after: no goals
tactic: classical exact ⟨fun F => HasColimit.mk (liftToFinsetColimitCocone F)⟩
Theorem: Finset.card_inter_add_card_union
File: Mathlib/Data/Finset/Card.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
R : Type u_3
s✝ t✝ u : Finset α
f : α → β
n : ℕ
inst✝ : DecidableEq α
s t : Finset α
⊢ (s ∩ t).card + (s ∪ t).card = s.card + t.card
state_after: no goals
tactic: rw [add_comm, card_union_add_card_inter]
Theorem: CategoryTheory.ShortComplex.LeftHomologyMapData.op_φH
File: Mathlib/Algebra/Homology/ShortComplex/RightHomology.lean

Proof steps:
state_before: C : Type u_1
inst✝¹ : Category.{?u.149201, u_1} C
inst✝ : HasZeroMorphisms C
S S₁✝ S₂✝ S₃ S₁ S₂ : ShortComplex C
φ : S₁ ⟶ S₂
h₁ : S₁.LeftHomologyData
h₂ : S₂.LeftHomologyData
ψ : LeftHomologyMapData φ h₁ h₂
⊢ (h₂.op.p ≫ ψ.φK.op).unop = ((opMap φ).τ₂ ≫ h₁.op.p).unop
state_after: no goals
tactic: simp
state_before: C : Type u_1
inst✝¹ : Category.{?u.149201, u_1} C
inst✝ : HasZeroMorphisms C
S S₁✝ S₂✝ S₃ S₁ S₂ : ShortComplex C
φ : S₁ ⟶ S₂
h₁ : S₁.LeftHomologyData
h₂ : S₂.LeftHomologyData
ψ : LeftHomologyMapData φ h₁ h₂
⊢ (ψ.φK.op ≫ h₁.op.g').unop = (h₂.op.g' ≫ (opMap φ).τ₃).unop
state_after: no goals
tactic: simp
state_before: C : Type u_1
inst✝¹ : Category.{?u.149201, u_1} C
inst✝ : HasZeroMorphisms C
S S₁✝ S₂✝ S₃ S₁ S₂ : ShortComplex C
φ : S₁ ⟶ S₂
h₁ : S₁.LeftHomologyData
h₂ : S₂.LeftHomologyData
ψ : LeftHomologyMapData φ h₁ h₂
⊢ (ψ.φH.op ≫ h₁.op.ι).unop = (h₂.op.ι ≫ ψ.φK.op).unop
state_after: no goals
tactic: simp
Theorem: Option.casesOn'_eq_elim
File: Mathlib/Data/Option/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
b : β
f : α → β
a : Option α
⊢ a.casesOn' b f = a.elim b f
state_after: no goals
tactic: cases a <;> rfl