1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: GromovHausdorff.HD_bound_aux1
File: Mathlib/Topology/MetricSpace/GromovHausdorffRealized.lean

tactic: obtain ⟨Cf, hCf⟩ := f.isBounded_range.bddAbove
state_before: X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f✝ : GromovHausdorff.ProdSpaceFun X Y
x y z t : X ⊕ Y
f : GromovHausdorff.Cb X Y
C : ℝ
⊢ BddAbove (range fun x => ⨅ y, f (inl x, inr y) + C)
state_after: case intro
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f✝ : GromovHausdorff.ProdSpaceFun X Y
x y z t : X ⊕ Y
f : GromovHausdorff.Cb X Y
C Cf : ℝ
hCf : Cf ∈ upperBounds (range ⇑f)
⊢ BddAbove (range fun x => ⨅ y, f (inl x, inr y) + C)

tactic: refine ⟨Cf + C, forall_mem_range.2 fun x => ?_⟩
state_before: case intro
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f✝ : GromovHausdorff.ProdSpaceFun X Y
x y z t : X ⊕ Y
f : GromovHausdorff.Cb X Y
C Cf : ℝ
hCf : Cf ∈ upperBounds (range ⇑f)
⊢ BddAbove (range fun x => ⨅ y, f (inl x, inr y) + C)
state_after: case intro
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f✝ : GromovHausdorff.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
f : GromovHausdorff.Cb X Y
C Cf : ℝ
hCf : Cf ∈ upperBounds (range ⇑f)
x : X
⊢ ⨅ y, f (inl x, inr y) + C ≤ Cf + C

tactic: calc
  ⨅ y, f (inl x, inr y) + C ≤ f (inl x, inr default) + C := ciInf_le (HD_below_aux1 C) default
  _ ≤ Cf + C := add_le_add ((fun x => hCf (mem_range_self x)) _) le_rfl
state_before: case intro
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f✝ : GromovHausdorff.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
f : GromovHausdorff.Cb X Y
C Cf : ℝ
hCf : Cf ∈ upperBounds (range ⇑f)
x : X
⊢ ⨅ y, f (inl x, inr y) + C ≤ Cf + C
state_after: no goals
Theorem: HomologicalComplex₂.d_comm
File: Mathlib/Algebra/Homology/HomologicalBicomplex.lean

tactic: simp
state_before: C : Type u_1
inst✝¹ : Category.{u_4, u_1} C
inst✝ : HasZeroMorphisms C
I₁ : Type u_2
I₂ : Type u_3
c₁ : ComplexShape I₁
c₂ : ComplexShape I₂
K : HomologicalComplex₂ C c₁ c₂
i₁ i₁' : I₁
i₂ i₂' : I₂
⊢ (K.d i₁ i₁').f i₂ ≫ (K.X i₁').d i₂ i₂' = (K.X i₁).d i₂ i₂' ≫ (K.d i₁ i₁').f i₂'
state_after: no goals
Theorem: range_pow_padicValNat_subset_divisors'
File: Mathlib/NumberTheory/Padics/PadicVal.lean

tactic: rcases eq_or_ne n 0 with (rfl | hn)
state_before: p n : ℕ
hp : Fact (Nat.Prime p)
⊢ Finset.image (fun t => p ^ (t + 1)) (Finset.range (padicValNat p n)) ⊆ n.divisors.erase 1
state_after: case inl
p : ℕ
hp : Fact (Nat.Prime p)
⊢ Finset.image (fun t => p ^ (t + 1)) (Finset.range (padicValNat p 0)) ⊆ (divisors 0).erase 1

case inr
p n : ℕ
hp : Fact (Nat.Prime p)
hn : n ≠ 0
⊢ Finset.image (fun t => p ^ (t + 1)) (Finset.range (padicValNat p n)) ⊆ n.divisors.erase 1

tactic: intro t ht
state_before: case inr
p n : ℕ
hp : Fact (Nat.Prime p)
hn : n ≠ 0
⊢ Finset.image (fun t => p ^ (t + 1)) (Finset.range (padicValNat p n)) ⊆ n.divisors.erase 1
state_after: case inr
p n : ℕ
hp : Fact (Nat.Prime p)
hn : n ≠ 0
t : ℕ
ht : t ∈ Finset.image (fun t => p ^ (t + 1)) (Finset.range (padicValNat p n))
⊢ t ∈ n.divisors.erase 1

tactic: simp only [exists_prop, Finset.mem_image, Finset.mem_range] at ht
state_before: case inr
p n : ℕ
hp : Fact (Nat.Prime p)
hn : n ≠ 0
t : ℕ
ht : t ∈ Finset.image (fun t => p ^ (t + 1)) (Finset.range (padicValNat p n))
⊢ t ∈ n.divisors.erase 1
state_after: case inr
p n : ℕ
hp : Fact (Nat.Prime p)
hn : n ≠ 0
t : ℕ
ht : ∃ a < padicValNat p n, p ^ (a + 1) = t
⊢ t ∈ n.divisors.erase 1

tactic: obtain ⟨k, hk, rfl⟩ := ht
state_before: case inr
p n : ℕ
hp : Fact (Nat.Prime p)
hn : n ≠ 0
t : ℕ
ht : ∃ a < padicValNat p n, p ^ (a + 1) = t
⊢ t ∈ n.divisors.erase 1
state_after: case inr.intro.intro
p n : ℕ
hp : Fact (Nat.Prime p)
hn : n ≠ 0
k : ℕ
hk : k < padicValNat p n
⊢ p ^ (k + 1) ∈ n.divisors.erase 1

tactic: rw [Finset.mem_erase, Nat.mem_divisors]
state_before: case inr.intro.intro
p n : ℕ
hp : Fact (Nat.Prime p)
hn : n ≠ 0
k : ℕ
hk : k < padicValNat p n
⊢ p ^ (k + 1) ∈ n.divisors.erase 1
state_after: case inr.intro.intro
p n : ℕ
hp : Fact (Nat.Prime p)
hn : n ≠ 0
k : ℕ
hk : k < padicValNat p n
⊢ p ^ (k + 1) ≠ 1 ∧ p ^ (k + 1) ∣ n ∧ n ≠ 0

tactic: refine ⟨?_, (pow_dvd_pow p <| succ_le_iff.2 hk).trans pow_padicValNat_dvd, hn⟩
state_before: case inr.intro.intro
p n : ℕ
hp : Fact (Nat.Prime p)
hn : n ≠ 0
k : ℕ
hk : k < padicValNat p n
⊢ p ^ (k + 1) ≠ 1 ∧ p ^ (k + 1) ∣ n ∧ n ≠ 0
state_after: case inr.intro.intro
p n : ℕ
hp : Fact (Nat.Prime p)
hn : n ≠ 0
k : ℕ
hk : k < padicValNat p n
⊢ p ^ (k + 1) ≠ 1

tactic: exact (Nat.one_lt_pow k.succ_ne_zero hp.out.one_lt).ne'
state_before: case inr.intro.intro
p n : ℕ
hp : Fact (Nat.Prime p)
hn : n ≠ 0
k : ℕ
hk : k < padicValNat p n
⊢ p ^ (k + 1) ≠ 1
state_after: no goals

tactic: simp
state_before: case inl
p : ℕ
hp : Fact (Nat.Prime p)
⊢ Finset.image (fun t => p ^ (t + 1)) (Finset.range (padicValNat p 0)) ⊆ (divisors 0).erase 1
state_after: no goals
Theorem: CategoryTheory.Limits.prod.map_map
File: Mathlib/CategoryTheory/Limits/Shapes/BinaryProducts.lean

tactic: ext <;> simp
state_before: C : Type u
inst✝³ : Category.{v, u} C
X Y A₁ A₂ A₃ B₁ B₂ B₃ : C
inst✝² : HasBinaryProduct A₁ B₁
inst✝¹ : HasBinaryProduct A₂ B₂
inst✝ : HasBinaryProduct A₃ B₃
f : A₁ ⟶ A₂
g : B₁ ⟶ B₂
h : A₂ ⟶ A₃
k : B₂ ⟶ B₃
⊢ map f g ≫ map h k = map (f ≫ h) (g ≫ k)
state_after: no goals
Theorem: Function.Antiperiodic.sub_int_mul_eq
File: Mathlib/Algebra/Periodic.lean

tactic: simpa only [zsmul_eq_mul] using h.sub_zsmul_eq n
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
f g : α → β
c c₁ c₂ x : α
inst✝¹ : Ring α
inst✝ : Ring β
h : Antiperiodic f c
n : ℤ
⊢ f (x - ↑n * c) = ↑↑n.negOnePow * f x
state_after: no goals
Theorem: Cardinal.mk_compl_eq_mk_compl_infinite
File: Mathlib/SetTheory/Cardinal/Ordinal.lean

tactic: rw [mk_compl_of_infinite s hs, mk_compl_of_infinite t ht]
state_before: α : Type u_1
inst✝ : Infinite α
s t : Set α
hs : #↑s < #α
ht : #↑t < #α
⊢ #↑sᶜ = #↑tᶜ
state_after: no goals
Theorem: IsNoetherian.range_finsetBasis
File: Mathlib/FieldTheory/Finiteness.lean

tactic: rw [finsetBasis, Basis.range_reindex, Basis.range_ofVectorSpace]
state_before: K : Type u
V : Type v
inst✝³ : DivisionRing K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : IsNoetherian K V
⊢ Set.range ⇑(finsetBasis K V) = Basis.ofVectorSpaceIndex K V
state_after: no goals
Theorem: Part.Fix.approx_le_fix
File: Mathlib/Control/LawfulFix.lean

tactic: rw [mem_iff f]
state_before: α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
i : ℕ
a : α
b : β a
hh : b ∈ approx (⇑f) i a
⊢ b ∈ Part.fix (⇑f) a
state_after: α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
i : ℕ
a : α
b : β a
hh : b ∈ approx (⇑f) i a
⊢ ∃ i, b ∈ approx (⇑f) i a

tactic: exact ⟨_, hh⟩
state_before: α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
i : ℕ
a : α
b : β a
hh : b ∈ approx (⇑f) i a
⊢ ∃ i, b ∈ approx (⇑f) i a
state_after: no goals
Theorem: Filter.pure_le_principal
File: Mathlib/Order/Filter/Basic.lean

tactic: simp
state_before: α : Type u
β : Type v
γ : Type w
δ : Type u_1
ι : Sort x
l : Filter α
s : Set α
a : α
⊢ pure a ≤ 𝓟 s ↔ a ∈ s
state_after: no goals
Theorem: Subgroup.closure_singleton_one
File: Mathlib/Algebra/Group/Subgroup/Basic.lean

tactic: simp [eq_bot_iff_forall, mem_closure_singleton]
state_before: G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝³ : Group G
inst✝² : Group G'
inst✝¹ : Group G''
A : Type u_4
inst✝ : AddGroup A
H K : Subgroup G
k : Set G
⊢ closure {1} = ⊥
state_after: no goals
Theorem: CategoryTheory.ShortComplex.ShortExact.surjective_g
File: Mathlib/Algebra/Homology/ShortComplex/ConcreteCategory.lean

tactic: rw [← Preadditive.epi_iff_surjective]
state_before: C : Type u
inst✝⁶ : Category.{v, u} C
inst✝⁵ : ConcreteCategory C
inst✝⁴ : HasForget₂ C Ab
inst✝³ : Preadditive C
inst✝² : (forget₂ C Ab).Additive
inst✝¹ : (forget₂ C Ab).PreservesHomology
inst✝ : HasZeroObject C
S : ShortComplex C
hS : S.ShortExact
⊢ Function.Surjective ⇑((forget₂ C Ab).map S.g)
state_after: C : Type u
inst✝⁶ : Category.{v, u} C
inst✝⁵ : ConcreteCategory C
inst✝⁴ : HasForget₂ C Ab
inst✝³ : Preadditive C
inst✝² : (forget₂ C Ab).Additive
inst✝¹ : (forget₂ C Ab).PreservesHomology
inst✝ : HasZeroObject C
S : ShortComplex C
hS : S.ShortExact
⊢ Epi S.g

tactic: exact hS.epi_g
state_before: C : Type u
inst✝⁶ : Category.{v, u} C
inst✝⁵ : ConcreteCategory C
inst✝⁴ : HasForget₂ C Ab
inst✝³ : Preadditive C
inst✝² : (forget₂ C Ab).Additive
inst✝¹ : (forget₂ C Ab).PreservesHomology
inst✝ : HasZeroObject C
S : ShortComplex C
hS : S.ShortExact
⊢ Epi S.g
state_after: no goals
Theorem: WeierstrassCurve.Jacobian.map_dblZ
File: Mathlib/AlgebraicGeometry/EllipticCurve/Jacobian.lean

tactic: simp [dblZ]
state_before: R : Type u
inst✝² : CommRing R
W' : Jacobian R
F : Type v
inst✝¹ : Field F
W : Jacobian F
S : Type u_1
inst✝ : CommRing S
f : R →+* S
P Q : Fin 3 → R
⊢ dblZ (map W' f) (⇑f ∘ P) = f (W'.dblZ P)
state_after: no goals
Theorem: Equiv.ringEquiv_symm_apply
File: Mathlib/Logic/Equiv/TransferInstance.lean

tactic: letI := Equiv.add e
state_before: α : Type u
β : Type v
e✝ e : α ≃ β
inst✝¹ : Add β
inst✝ : Mul β
b : β
⊢ Sort ?u.16710
state_after: α : Type u
β : Type v
e✝ e : α ≃ β
inst✝¹ : Add β
inst✝ : Mul β
b : β
this : Add α := e.add
⊢ Sort ?u.16710

tactic: letI := Equiv.mul e
state_before: α : Type u
β : Type v
e✝ e : α ≃ β
inst✝¹ : Add β
inst✝ : Mul β
b : β
this : Add α := e.add
⊢ Sort ?u.16710
state_after: α : Type u
β : Type v
e✝ e : α ≃ β
inst✝¹ : Add β
inst✝ : Mul β
b : β
this✝ : Add α := e.add
this : Mul α := e.mul
⊢ Sort ?u.16710

tactic: exact (ringEquiv e).symm b = e.symm b
state_before: α : Type u
β : Type v
e✝ e : α ≃ β
inst✝¹ : Add β
inst✝ : Mul β
b : β
this✝ : Add α := e.add
this : Mul α := e.mul
⊢ Sort ?u.16710
state_after: no goals
Theorem: NumberField.mixedEmbedding.normAtPlace_eq_zero
File: Mathlib/NumberTheory/NumberField/CanonicalEmbedding/Basic.lean

tactic: refine ⟨fun h ↦ ?_, fun h ↦ ?_⟩
state_before: K : Type u_1
inst✝ : Field K
x : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
⊢ (∀ (w : InfinitePlace K), (normAtPlace w) x = 0) ↔ x = 0
state_after: case refine_1
K : Type u_1
inst✝ : Field K
x : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
h : ∀ (w : InfinitePlace K), (normAtPlace w) x = 0
⊢ x = 0

case refine_2
K : Type u_1
inst✝ : Field K
x : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
h : x = 0
⊢ ∀ (w : InfinitePlace K), (normAtPlace w) x = 0

tactic: ext w
state_before: case refine_1
K : Type u_1
inst✝ : Field K
x : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
h : ∀ (w : InfinitePlace K), (normAtPlace w) x = 0
⊢ x = 0
state_after: case refine_1.a.h
K : Type u_1
inst✝ : Field K
x : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
h : ∀ (w : InfinitePlace K), (normAtPlace w) x = 0
w : { w // w.IsReal }
⊢ x.1 w = 0.1 w

case refine_1.a.h
K : Type u_1
inst✝ : Field K
x : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
h : ∀ (w : InfinitePlace K), (normAtPlace w) x = 0
w : { w // w.IsComplex }
⊢ x.2 w = 0.2 w

tactic: exact norm_eq_zero'.mp (normAtPlace_apply_isReal w.prop _ ▸ h w.1)
state_before: case refine_1.a.h
K : Type u_1
inst✝ : Field K
x : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
h : ∀ (w : InfinitePlace K), (normAtPlace w) x = 0
w : { w // w.IsReal }
⊢ x.1 w = 0.1 w
state_after: no goals

tactic: exact norm_eq_zero'.mp (normAtPlace_apply_isComplex w.prop _ ▸ h w.1)
state_before: case refine_1.a.h
K : Type u_1
inst✝ : Field K
x : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
h : ∀ (w : InfinitePlace K), (normAtPlace w) x = 0
w : { w // w.IsComplex }
⊢ x.2 w = 0.2 w
state_after: no goals

tactic: simp_rw [h, map_zero, implies_true]
state_before: case refine_2
K : Type u_1
inst✝ : Field K
x : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
h : x = 0
⊢ ∀ (w : InfinitePlace K), (normAtPlace w) x = 0
state_after: no goals
Theorem: FreeGroup.Red.Step.append_left
File: Mathlib/GroupTheory/FreeGroup/Basic.lean

tactic: rw [← List.append_assoc, ← List.append_assoc]
state_before: α : Type u
L L₁ L₂ L₃ L₄ x✝¹ L₁✝ L₂✝ : List (α × Bool)
x✝ : α
b✝ : Bool
⊢ Step (x✝¹ ++ (L₁✝ ++ (x✝, b✝) :: (x✝, !b✝) :: L₂✝)) (x✝¹ ++ (L₁✝ ++ L₂✝))
state_after: α : Type u
L L₁ L₂ L₃ L₄ x✝¹ L₁✝ L₂✝ : List (α × Bool)
x✝ : α
b✝ : Bool
⊢ Step (x✝¹ ++ L₁✝ ++ (x✝, b✝) :: (x✝, !b✝) :: L₂✝) (x✝¹ ++ L₁✝ ++ L₂✝)

tactic: constructor
state_before: α : Type u
L L₁ L₂ L₃ L₄ x✝¹ L₁✝ L₂✝ : List (α × Bool)
x✝ : α
b✝ : Bool
⊢ Step (x✝¹ ++ L₁✝ ++ (x✝, b✝) :: (x✝, !b✝) :: L₂✝) (x✝¹ ++ L₁✝ ++ L₂✝)
state_after: no goals
Theorem: Nat.totient_eq_div_primeFactors_mul
File: Mathlib/Data/Nat/Totient.lean

tactic: rw [← mul_div_left n.totient, totient_mul_prod_primeFactors, mul_comm,
  Nat.mul_div_assoc _ (prod_primeFactors_dvd n), mul_comm]
state_before: n : ℕ
⊢ φ n = (n / ∏ p ∈ n.primeFactors, p) * ∏ p ∈ n.primeFactors, (p - 1)
state_after: n : ℕ
⊢ 0 < ∏ p ∈ n.primeFactors, p

tactic: exact prod_pos (fun p => pos_of_mem_primeFactors)
state_before: n : ℕ
⊢ 0 < ∏ p ∈ n.primeFactors, p
state_after: no goals
Theorem: Multiset.nodup_iff_count_eq_one
File: Mathlib/Data/Multiset/Nodup.lean

tactic: simpa using List.nodup_iff_count_eq_one
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s t : Multiset α
a : α
inst✝ : DecidableEq α
_l : List α
⊢ Nodup (Quot.mk Setoid.r _l) ↔ ∀ a ∈ Quot.mk Setoid.r _l, count a (Quot.mk Setoid.r _l) = 1
state_after: no goals
Theorem: Complex.abs_deriv_le_one_of_mapsTo_ball
File: Mathlib/Analysis/Complex/Schwarz.lean

tactic: rwa [hc]
state_before: f : ℂ → ℂ
c z : ℂ
R R₁ R₂ : ℝ
hd : DifferentiableOn ℂ f (ball c R)
h_maps : MapsTo f (ball c R) (ball c R)
hc : f c = c
h₀ : 0 < R
⊢ MapsTo f (ball c R) (ball (f c) R)
state_after: no goals
Theorem: HasProd.unique
File: Mathlib/Topology/Algebra/InfiniteSum/Defs.lean

tactic: classical exact tendsto_nhds_unique
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : CommMonoid α
inst✝¹ : TopologicalSpace α
f g : β → α
a b : α
s : Finset β
a₁ a₂ : α
inst✝ : T2Space α
⊢ HasProd f a₁ → HasProd f a₂ → a₁ = a₂
state_after: no goals

tactic: exact tendsto_nhds_unique
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : CommMonoid α
inst✝¹ : TopologicalSpace α
f g : β → α
a b : α
s : Finset β
a₁ a₂ : α
inst✝ : T2Space α
⊢ HasProd f a₁ → HasProd f a₂ → a₁ = a₂
state_after: no goals
Theorem: Matroid.restriction_iff_exists
File: Mathlib/Data/Matroid/Restrict.lean

tactic: use Restriction.exists_eq_restrict
state_before: α : Type u_1
M : Matroid α
R I J X Y : Set α
N : Matroid α
⊢ N ≤r M ↔ ∃ R ⊆ M.E, N = M ↾ R
state_after: case mpr
α : Type u_1
M : Matroid α
R I J X Y : Set α
N : Matroid α
⊢ (∃ R ⊆ M.E, N = M ↾ R) → N ≤r M

tactic: rintro ⟨R, hR, rfl⟩
state_before: case mpr
α : Type u_1
M : Matroid α
R I J X Y : Set α
N : Matroid α
⊢ (∃ R ⊆ M.E, N = M ↾ R) → N ≤r M
state_after: case mpr.intro.intro
α : Type u_1
M : Matroid α
R✝ I J X Y R : Set α
hR : R ⊆ M.E
⊢ M ↾ R ≤r M

tactic: exact restrict_restriction M R hR
state_before: case mpr.intro.intro
α : Type u_1
M : Matroid α
R✝ I J X Y R : Set α
hR : R ⊆ M.E
⊢ M ↾ R ≤r M
state_after: no goals
Theorem: Set.prod_iUnion₂
File: Mathlib/Data/Set/Lattice.lean

tactic: simp_rw [prod_iUnion]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
ι₂ : Sort u_6
κ : ι → Sort u_7
κ₁ : ι → Sort u_8
κ₂ : ι → Sort u_9
κ' : ι' → Sort u_10
s : Set α
t : (i : ι) → κ i → Set β
⊢ s ×ˢ ⋃ i, ⋃ j, t i j = ⋃ i, ⋃ j, s ×ˢ t i j
state_after: no goals
Theorem: Filter.ptendsto'_of_ptendsto
File: Mathlib/Order/Filter/Partial.lean

tactic: rw [ptendsto_def, ptendsto'_def]
state_before: α : Type u
β : Type v
γ : Type w
f : α →. β
l₁ : Filter α
l₂ : Filter β
h : f.Dom ∈ l₁
⊢ PTendsto f l₁ l₂ → PTendsto' f l₁ l₂
state_after: α : Type u
β : Type v
γ : Type w
f : α →. β
l₁ : Filter α
l₂ : Filter β
h : f.Dom ∈ l₁
⊢ (∀ s ∈ l₂, f.core s ∈ l₁) → ∀ s ∈ l₂, f.preimage s ∈ l₁

tactic: intro h' s sl₂
state_before: α : Type u
β : Type v
γ : Type w
f : α →. β
l₁ : Filter α
l₂ : Filter β
h : f.Dom ∈ l₁
⊢ (∀ s ∈ l₂, f.core s ∈ l₁) → ∀ s ∈ l₂, f.preimage s ∈ l₁
state_after: α : Type u
β : Type v
γ : Type w
f : α →. β
l₁ : Filter α
l₂ : Filter β
h : f.Dom ∈ l₁
h' : ∀ s ∈ l₂, f.core s ∈ l₁
s : Set β
sl₂ : s ∈ l₂
⊢ f.preimage s ∈ l₁

tactic: rw [PFun.preimage_eq]
state_before: α : Type u
β : Type v
γ : Type w
f : α →. β
l₁ : Filter α
l₂ : Filter β
h : f.Dom ∈ l₁
h' : ∀ s ∈ l₂, f.core s ∈ l₁
s : Set β
sl₂ : s ∈ l₂
⊢ f.preimage s ∈ l₁
state_after: α : Type u
β : Type v
γ : Type w
f : α →. β
l₁ : Filter α
l₂ : Filter β
h : f.Dom ∈ l₁
h' : ∀ s ∈ l₂, f.core s ∈ l₁
s : Set β
sl₂ : s ∈ l₂
⊢ f.core s ∩ f.Dom ∈ l₁

tactic: exact inter_mem (h' s sl₂) h
state_before: α : Type u
β : Type v
γ : Type w
f : α →. β
l₁ : Filter α
l₂ : Filter β
h : f.Dom ∈ l₁
h' : ∀ s ∈ l₂, f.core s ∈ l₁
s : Set β
sl₂ : s ∈ l₂
⊢ f.core s ∩ f.Dom ∈ l₁
state_after: no goals
Theorem: BoundedLatticeHom.cancel_left
File: Mathlib/Order/Hom/Lattice.lean

tactic: rw [← comp_apply, h, comp_apply]
state_before: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
δ : Type u_6
inst✝⁸ : FunLike F α β
inst✝⁷ : Lattice α
inst✝⁶ : Lattice β
inst✝⁵ : Lattice γ
inst✝⁴ : Lattice δ
inst✝³ : BoundedOrder α
inst✝² : BoundedOrder β
inst✝¹ : BoundedOrder γ
inst✝ : BoundedOrder δ
g : BoundedLatticeHom β γ
f₁ f₂ : BoundedLatticeHom α β
hg : Injective ⇑g
h : g.comp f₁ = g.comp f₂
a : α
⊢ g (f₁ a) = g (f₂ a)
state_after: no goals
Theorem: Set.eq_of_mem_uIoc_of_mem_uIoc
File: Mathlib/Order/Interval/Set/UnorderedInterval.lean

tactic: simp_rw [mem_uIoc]
state_before: α : Type u_1
β : Type u_2
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
s : Set α
a a₁ a₂ b b₁ b₂ c d x : α
⊢ a ∈ Ι b c → b ∈ Ι a c → a = b
state_after: α : Type u_1
β : Type u_2
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
s : Set α
a a₁ a₂ b b₁ b₂ c d x : α
⊢ b < a ∧ a ≤ c ∨ c < a ∧ a ≤ b → a < b ∧ b ≤ c ∨ c < b ∧ b ≤ a → a = b

tactic: rintro (⟨_, _⟩ | ⟨_, _⟩) (⟨_, _⟩ | ⟨_, _⟩) <;> apply le_antisymm <;>
first |assumption|exact le_of_lt ‹_›|exact le_trans ‹_› (le_of_lt ‹_›)
state_before: α : Type u_1
β : Type u_2
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
s : Set α
a a₁ a₂ b b₁ b₂ c d x : α
⊢ b < a ∧ a ≤ c ∨ c < a ∧ a ≤ b → a < b ∧ b ≤ c ∨ c < b ∧ b ≤ a → a = b
state_after: no goals

tactic: assumption
state_before: case inr.intro.inr.intro.a
α : Type u_1
β : Type u_2
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
s : Set α
a a₁ a₂ b b₁ b₂ c d x : α
left✝¹ : c < a
right✝¹ : a ≤ b
left✝ : c < b
right✝ : b ≤ a
⊢ b ≤ a
state_after: no goals

tactic: exact le_of_lt ‹_›
state_before: case inl.intro.inl.intro.a
α : Type u_1
β : Type u_2
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
s : Set α
a a₁ a₂ b b₁ b₂ c d x : α
left✝¹ : b < a
right✝¹ : a ≤ c
left✝ : a < b
right✝ : b ≤ c
⊢ b ≤ a
state_after: no goals

tactic: exact le_trans ‹_› (le_of_lt ‹_›)
state_before: case inr.intro.inl.intro.a
α : Type u_1
β : Type u_2
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
s : Set α
a a₁ a₂ b b₁ b₂ c d x : α
left✝¹ : c < a
right✝¹ : a ≤ b
left✝ : a < b
right✝ : b ≤ c
⊢ b ≤ a
state_after: no goals
Theorem: Finset.card_union
File: Mathlib/Data/Finset/Card.lean

tactic: rw [← card_union_add_card_inter, Nat.add_sub_cancel]
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.card + t.card - (s ∩ t).card
state_after: no goals
Theorem: ArithmeticFunction.zeta_mul_pow_eq_sigma
File: Mathlib/NumberTheory/ArithmeticFunction.lean

tactic: ext
state_before: R : Type u_1
k : ℕ
⊢ ζ * pow k = σ k
state_after: case h
R : Type u_1
k x✝ : ℕ
⊢ (ζ * pow k) x✝ = (σ k) x✝

tactic: rw [sigma, zeta_mul_apply]
state_before: case h
R : Type u_1
k x✝ : ℕ
⊢ (ζ * pow k) x✝ = (σ k) x✝
state_after: case h
R : Type u_1
k x✝ : ℕ
⊢ ∑ i ∈ x✝.divisors, (pow k) i = { toFun := fun n => ∑ d ∈ n.divisors, d ^ k, map_zero' := ⋯ } x✝

tactic: apply sum_congr rfl
state_before: case h
R : Type u_1
k x✝ : ℕ
⊢ ∑ i ∈ x✝.divisors, (pow k) i = { toFun := fun n => ∑ d ∈ n.divisors, d ^ k, map_zero' := ⋯ } x✝
state_after: case h
R : Type u_1
k x✝ : ℕ
⊢ ∀ x ∈ x✝.divisors, (pow k) x = x ^ k

tactic: intro x hx
state_before: case h
R : Type u_1
k x✝ : ℕ
⊢ ∀ x ∈ x✝.divisors, (pow k) x = x ^ k
state_after: case h
R : Type u_1
k x✝ x : ℕ
hx : x ∈ x✝.divisors
⊢ (pow k) x = x ^ k

tactic: rw [pow_apply, if_neg (not_and_of_not_right _ _)]
state_before: case h
R : Type u_1
k x✝ x : ℕ
hx : x ∈ x✝.divisors
⊢ (pow k) x = x ^ k
state_after: R : Type u_1
k x✝ x : ℕ
hx : x ∈ x✝.divisors
⊢ ¬x = 0

tactic: contrapose! hx
state_before: R : Type u_1
k x✝ x : ℕ
hx : x ∈ x✝.divisors
⊢ ¬x = 0
state_after: R : Type u_1
k x✝ x : ℕ
hx : x = 0
⊢ x ∉ x✝.divisors

tactic: simp [hx]
state_before: R : Type u_1
k x✝ x : ℕ
hx : x = 0
⊢ x ∉ x✝.divisors
state_after: no goals
Theorem: StrictConvexOn.lt_slope_of_hasDerivWithinAt_Ioi
File: Mathlib/Analysis/Convex/Deriv.lean

tactic: obtain ⟨u, hxu, huy⟩ := exists_between hxy
state_before: S : Set ℝ
f : ℝ → ℝ
x y f' : ℝ
hfc : StrictConvexOn ℝ S f
hx : x ∈ S
hy : y ∈ S
hxy : x < y
hf' : HasDerivWithinAt f f' (Ioi x) x
⊢ f' < slope f x y
state_after: case intro.intro
S : Set ℝ
f : ℝ → ℝ
x y f' : ℝ
hfc : StrictConvexOn ℝ S f
hx : x ∈ S
hy : y ∈ S
hxy : x < y
hf' : HasDerivWithinAt f f' (Ioi x) x
u : ℝ
hxu : x < u
huy : u < y
⊢ f' < slope f x y

tactic: have hu : u ∈ S := hfc.1.ordConnected.out hx hy ⟨hxu.le, huy.le⟩
state_before: case intro.intro
S : Set ℝ
f : ℝ → ℝ
x y f' : ℝ
hfc : StrictConvexOn ℝ S f
hx : x ∈ S
hy : y ∈ S
hxy : x < y
hf' : HasDerivWithinAt f f' (Ioi x) x
u : ℝ
hxu : x < u
huy : u < y
⊢ f' < slope f x y
state_after: case intro.intro
S : Set ℝ
f : ℝ → ℝ
x y f' : ℝ
hfc : StrictConvexOn ℝ S f
hx : x ∈ S
hy : y ∈ S
hxy : x < y
hf' : HasDerivWithinAt f f' (Ioi x) x
u : ℝ
hxu : x < u
huy : u < y
hu : u ∈ S
⊢ f' < slope f x y

tactic: have := hfc.secant_strict_mono hx hu hy hxu.ne' hxy.ne' huy
state_before: case intro.intro
S : Set ℝ
f : ℝ → ℝ
x y f' : ℝ
hfc : StrictConvexOn ℝ S f
hx : x ∈ S
hy : y ∈ S
hxy : x < y
hf' : HasDerivWithinAt f f' (Ioi x) x
u : ℝ
hxu : x < u
huy : u < y
hu : u ∈ S
⊢ f' < slope f x y
state_after: case intro.intro
S : Set ℝ
f : ℝ → ℝ
x y f' : ℝ
hfc : StrictConvexOn ℝ S f
hx : x ∈ S
hy : y ∈ S
hxy : x < y
hf' : HasDerivWithinAt f f' (Ioi x) x
u : ℝ
hxu : x < u
huy : u < y
hu : u ∈ S
this : (f u - f x) / (u - x) < (f y - f x) / (y - x)
⊢ f' < slope f x y

tactic: simp only [← slope_def_field] at this
state_before: case intro.intro
S : Set ℝ
f : ℝ → ℝ
x y f' : ℝ
hfc : StrictConvexOn ℝ S f
hx : x ∈ S
hy : y ∈ S
hxy : x < y
hf' : HasDerivWithinAt f f' (Ioi x) x
u : ℝ
hxu : x < u
huy : u < y
hu : u ∈ S
this : (f u - f x) / (u - x) < (f y - f x) / (y - x)
⊢ f' < slope f x y
state_after: case intro.intro
S : Set ℝ
f : ℝ → ℝ
x y f' : ℝ
hfc : StrictConvexOn ℝ S f
hx : x ∈ S
hy : y ∈ S
hxy : x < y
hf' : HasDerivWithinAt f f' (Ioi x) x
u : ℝ
hxu : x < u
huy : u < y
hu : u ∈ S
this : slope f x u < slope f x y
⊢ f' < slope f x y

tactic: exact (hfc.convexOn.le_slope_of_hasDerivWithinAt_Ioi hx hu hxu hf').trans_lt this
state_before: case intro.intro
S : Set ℝ
f : ℝ → ℝ
x y f' : ℝ
hfc : StrictConvexOn ℝ S f
hx : x ∈ S
hy : y ∈ S
hxy : x < y
hf' : HasDerivWithinAt f f' (Ioi x) x
u : ℝ
hxu : x < u
huy : u < y
hu : u ∈ S
this : slope f x u < slope f x y
⊢ f' < slope f x y
state_after: no goals