1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: CategoryTheory.strongMono_of_strongMono
File: Mathlib/CategoryTheory/Limits/Shapes/StrongEpi.lean

tactic: intros
state_before: C : Type u
inst✝¹ : Category.{v, u} C
P Q R : C
f : P ⟶ Q
g : Q ⟶ R
inst✝ : StrongMono (f ≫ g)
X Y : C
z : X ⟶ Y
⊢ ∀ [inst : Epi z], HasLiftingProperty z f
state_after: C : Type u
inst✝² : Category.{v, u} C
P Q R : C
f : P ⟶ Q
g : Q ⟶ R
inst✝¹ : StrongMono (f ≫ g)
X Y : C
z : X ⟶ Y
inst✝ : Epi z
⊢ HasLiftingProperty z f

tactic: constructor
state_before: C : Type u
inst✝² : Category.{v, u} C
P Q R : C
f : P ⟶ Q
g : Q ⟶ R
inst✝¹ : StrongMono (f ≫ g)
X Y : C
z : X ⟶ Y
inst✝ : Epi z
⊢ HasLiftingProperty z f
state_after: case sq_hasLift
C : Type u
inst✝² : Category.{v, u} C
P Q R : C
f : P ⟶ Q
g : Q ⟶ R
inst✝¹ : StrongMono (f ≫ g)
X Y : C
z : X ⟶ Y
inst✝ : Epi z
⊢ ∀ {f_1 : X ⟶ P} {g : Y ⟶ Q} (sq : CommSq f_1 z f g), sq.HasLift

tactic: intro u v sq
state_before: case sq_hasLift
C : Type u
inst✝² : Category.{v, u} C
P Q R : C
f : P ⟶ Q
g : Q ⟶ R
inst✝¹ : StrongMono (f ≫ g)
X Y : C
z : X ⟶ Y
inst✝ : Epi z
⊢ ∀ {f_1 : X ⟶ P} {g : Y ⟶ Q} (sq : CommSq f_1 z f g), sq.HasLift
state_after: case sq_hasLift
C : Type u
inst✝² : Category.{v, u} C
P Q R : C
f : P ⟶ Q
g : Q ⟶ R
inst✝¹ : StrongMono (f ≫ g)
X Y : C
z : X ⟶ Y
inst✝ : Epi z
u : X ⟶ P
v : Y ⟶ Q
sq : CommSq u z f v
⊢ sq.HasLift

tactic: have h₀ : u ≫ f ≫ g = z ≫ v ≫ g := by
  rw [← Category.assoc, eq_whisker sq.w, Category.assoc]
state_before: case sq_hasLift
C : Type u
inst✝² : Category.{v, u} C
P Q R : C
f : P ⟶ Q
g : Q ⟶ R
inst✝¹ : StrongMono (f ≫ g)
X Y : C
z : X ⟶ Y
inst✝ : Epi z
u : X ⟶ P
v : Y ⟶ Q
sq : CommSq u z f v
⊢ sq.HasLift
state_after: case sq_hasLift
C : Type u
inst✝² : Category.{v, u} C
P Q R : C
f : P ⟶ Q
g : Q ⟶ R
inst✝¹ : StrongMono (f ≫ g)
X Y : C
z : X ⟶ Y
inst✝ : Epi z
u : X ⟶ P
v : Y ⟶ Q
sq : CommSq u z f v
h₀ : u ≫ f ≫ g = z ≫ v ≫ g
⊢ sq.HasLift

tactic: exact CommSq.HasLift.mk' ⟨(CommSq.mk h₀).lift, by simp, by simp [← cancel_epi z, sq.w]⟩
state_before: case sq_hasLift
C : Type u
inst✝² : Category.{v, u} C
P Q R : C
f : P ⟶ Q
g : Q ⟶ R
inst✝¹ : StrongMono (f ≫ g)
X Y : C
z : X ⟶ Y
inst✝ : Epi z
u : X ⟶ P
v : Y ⟶ Q
sq : CommSq u z f v
h₀ : u ≫ f ≫ g = z ≫ v ≫ g
⊢ sq.HasLift
state_after: no goals

tactic: rw [← Category.assoc, eq_whisker sq.w, Category.assoc]
state_before: C : Type u
inst✝² : Category.{v, u} C
P Q R : C
f : P ⟶ Q
g : Q ⟶ R
inst✝¹ : StrongMono (f ≫ g)
X Y : C
z : X ⟶ Y
inst✝ : Epi z
u : X ⟶ P
v : Y ⟶ Q
sq : CommSq u z f v
⊢ u ≫ f ≫ g = z ≫ v ≫ g
state_after: no goals

tactic: simp
state_before: C : Type u
inst✝² : Category.{v, u} C
P Q R : C
f : P ⟶ Q
g : Q ⟶ R
inst✝¹ : StrongMono (f ≫ g)
X Y : C
z : X ⟶ Y
inst✝ : Epi z
u : X ⟶ P
v : Y ⟶ Q
sq : CommSq u z f v
h₀ : u ≫ f ≫ g = z ≫ v ≫ g
⊢ z ≫ ⋯.lift = u
state_after: no goals

tactic: simp [← cancel_epi z, sq.w]
state_before: C : Type u
inst✝² : Category.{v, u} C
P Q R : C
f : P ⟶ Q
g : Q ⟶ R
inst✝¹ : StrongMono (f ≫ g)
X Y : C
z : X ⟶ Y
inst✝ : Epi z
u : X ⟶ P
v : Y ⟶ Q
sq : CommSq u z f v
h₀ : u ≫ f ≫ g = z ≫ v ≫ g
⊢ ⋯.lift ≫ f = v
state_after: no goals
Theorem: DirichletCharacter.changeLevel_injective
File: Mathlib/NumberTheory/DirichletCharacter/Basic.lean

tactic: intro _ _ h
state_before: R : Type u_1
inst✝¹ : CommMonoidWithZero R
n : ℕ
χ : DirichletCharacter R n
m : ℕ
inst✝ : NeZero m
hm : n ∣ m
⊢ Function.Injective ⇑(changeLevel hm)
state_after: R : Type u_1
inst✝¹ : CommMonoidWithZero R
n : ℕ
χ : DirichletCharacter R n
m : ℕ
inst✝ : NeZero m
hm : n ∣ m
a₁✝ a₂✝ : DirichletCharacter R n
h : (changeLevel hm) a₁✝ = (changeLevel hm) a₂✝
⊢ a₁✝ = a₂✝

tactic: ext1 y
state_before: R : Type u_1
inst✝¹ : CommMonoidWithZero R
n : ℕ
χ : DirichletCharacter R n
m : ℕ
inst✝ : NeZero m
hm : n ∣ m
a₁✝ a₂✝ : DirichletCharacter R n
h : (changeLevel hm) a₁✝ = (changeLevel hm) a₂✝
⊢ a₁✝ = a₂✝
state_after: case h
R : Type u_1
inst✝¹ : CommMonoidWithZero R
n : ℕ
χ : DirichletCharacter R n
m : ℕ
inst✝ : NeZero m
hm : n ∣ m
a₁✝ a₂✝ : DirichletCharacter R n
h : (changeLevel hm) a₁✝ = (changeLevel hm) a₂✝
y : (ZMod n)ˣ
⊢ a₁✝ ↑y = a₂✝ ↑y

tactic: obtain ⟨z, rfl⟩ := ZMod.unitsMap_surjective hm y
state_before: case h
R : Type u_1
inst✝¹ : CommMonoidWithZero R
n : ℕ
χ : DirichletCharacter R n
m : ℕ
inst✝ : NeZero m
hm : n ∣ m
a₁✝ a₂✝ : DirichletCharacter R n
h : (changeLevel hm) a₁✝ = (changeLevel hm) a₂✝
y : (ZMod n)ˣ
⊢ a₁✝ ↑y = a₂✝ ↑y
state_after: case h.intro
R : Type u_1
inst✝¹ : CommMonoidWithZero R
n : ℕ
χ : DirichletCharacter R n
m : ℕ
inst✝ : NeZero m
hm : n ∣ m
a₁✝ a₂✝ : DirichletCharacter R n
h : (changeLevel hm) a₁✝ = (changeLevel hm) a₂✝
z : (ZMod m)ˣ
⊢ a₁✝ ↑((ZMod.unitsMap hm) z) = a₂✝ ↑((ZMod.unitsMap hm) z)

tactic: rw [ext_iff] at h
state_before: case h.intro
R : Type u_1
inst✝¹ : CommMonoidWithZero R
n : ℕ
χ : DirichletCharacter R n
m : ℕ
inst✝ : NeZero m
hm : n ∣ m
a₁✝ a₂✝ : DirichletCharacter R n
h : (changeLevel hm) a₁✝ = (changeLevel hm) a₂✝
z : (ZMod m)ˣ
⊢ a₁✝ ↑((ZMod.unitsMap hm) z) = a₂✝ ↑((ZMod.unitsMap hm) z)
state_after: case h.intro
R : Type u_1
inst✝¹ : CommMonoidWithZero R
n : ℕ
χ : DirichletCharacter R n
m : ℕ
inst✝ : NeZero m
hm : n ∣ m
a₁✝ a₂✝ : DirichletCharacter R n
h : ∀ (a : (ZMod m)ˣ), ((changeLevel hm) a₁✝) ↑a = ((changeLevel hm) a₂✝) ↑a
z : (ZMod m)ˣ
⊢ a₁✝ ↑((ZMod.unitsMap hm) z) = a₂✝ ↑((ZMod.unitsMap hm) z)

tactic: simpa [changeLevel_def] using h z
state_before: case h.intro
R : Type u_1
inst✝¹ : CommMonoidWithZero R
n : ℕ
χ : DirichletCharacter R n
m : ℕ
inst✝ : NeZero m
hm : n ∣ m
a₁✝ a₂✝ : DirichletCharacter R n
h : ∀ (a : (ZMod m)ˣ), ((changeLevel hm) a₁✝) ↑a = ((changeLevel hm) a₂✝) ↑a
z : (ZMod m)ˣ
⊢ a₁✝ ↑((ZMod.unitsMap hm) z) = a₂✝ ↑((ZMod.unitsMap hm) z)
state_after: no goals
Theorem: HNNExtension.of_injective
File: Mathlib/GroupTheory/HNNExtension.lean

tactic: rcases TransversalPair.nonempty G A B with ⟨d⟩
state_before: G : Type u_1
inst✝² : Group G
A B : Subgroup G
φ : ↥A ≃* ↥B
H : Type u_2
inst✝¹ : Group H
M : Type u_3
inst✝ : Monoid M
⊢ Injective ⇑of
state_after: case intro
G : Type u_1
inst✝² : Group G
A B : Subgroup G
φ : ↥A ≃* ↥B
H : Type u_2
inst✝¹ : Group H
M : Type u_3
inst✝ : Monoid M
d : TransversalPair G A B
⊢ Injective ⇑of

tactic: intros _ _ h
state_before: case intro
G : Type u_1
inst✝² : Group G
A B : Subgroup G
φ : ↥A ≃* ↥B
H : Type u_2
inst✝¹ : Group H
M : Type u_3
inst✝ : Monoid M
d : TransversalPair G A B
⊢ Injective ((fun x x_1 => x • x_1) ∘ ⇑of)
state_after: case intro
G : Type u_1
inst✝² : Group G
A B : Subgroup G
φ : ↥A ≃* ↥B
H : Type u_2
inst✝¹ : Group H
M : Type u_3
inst✝ : Monoid M
d : TransversalPair G A B
a₁✝ a₂✝ : G
h : ((fun x x_1 => x • x_1) ∘ ⇑of) a₁✝ = ((fun x x_1 => x • x_1) ∘ ⇑of) a₂✝
⊢ a₁✝ = a₂✝

tactic: exact eq_of_smul_eq_smul (fun w : NormalWord d =>
  by simp_all [Function.funext_iff, of_smul_eq_smul])
state_before: case intro
G : Type u_1
inst✝² : Group G
A B : Subgroup G
φ : ↥A ≃* ↥B
H : Type u_2
inst✝¹ : Group H
M : Type u_3
inst✝ : Monoid M
d : TransversalPair G A B
a₁✝ a₂✝ : G
h : ((fun x x_1 => x • x_1) ∘ ⇑of) a₁✝ = ((fun x x_1 => x • x_1) ∘ ⇑of) a₂✝
⊢ a₁✝ = a₂✝
state_after: no goals

tactic: simp_all [Function.funext_iff, of_smul_eq_smul]
state_before: G : Type u_1
inst✝² : Group G
A B : Subgroup G
φ : ↥A ≃* ↥B
H : Type u_2
inst✝¹ : Group H
M : Type u_3
inst✝ : Monoid M
d : TransversalPair G A B
a₁✝ a₂✝ : G
h : ((fun x x_1 => x • x_1) ∘ ⇑of) a₁✝ = ((fun x x_1 => x • x_1) ∘ ⇑of) a₂✝
w : NormalWord d
⊢ a₁✝ • w = a₂✝ • w
state_after: no goals
Theorem: inv_pow
File: Mathlib/Algebra/Group/Basic.lean

tactic: rw [pow_zero, pow_zero, inv_one]
state_before: α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝ : DivisionMonoid α
a✝ b c d a : α
⊢ a⁻¹ ^ 0 = (a ^ 0)⁻¹
state_after: no goals

tactic: rw [pow_succ', pow_succ, inv_pow _ n, mul_inv_rev]
state_before: α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝ : DivisionMonoid α
a✝ b c d a : α
n : ℕ
⊢ a⁻¹ ^ (n + 1) = (a ^ (n + 1))⁻¹
state_after: no goals
Theorem: LieSubmodule.comap_incl_eq_bot
File: Mathlib/Algebra/Lie/Submodule.lean

tactic: simp only [← LieSubmodule.coe_toSubmodule_eq_iff, LieSubmodule.coeSubmodule_comap,
  LieSubmodule.incl_coe, LieSubmodule.bot_coeSubmodule, ← Submodule.disjoint_iff_comap_eq_bot,
  disjoint_iff, inf_coe_toSubmodule]
state_before: R : Type u
L : Type v
L' : Type w₂
M : Type w
M' : Type w₁
inst✝¹² : CommRing R
inst✝¹¹ : LieRing L
inst✝¹⁰ : LieAlgebra R L
inst✝⁹ : LieRing L'
inst✝⁸ : LieAlgebra R L'
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
inst✝⁵ : LieRingModule L M
inst✝⁴ : LieModule R L M
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
inst✝¹ : LieRingModule L M'
inst✝ : LieModule R L M'
f : M →ₗ⁅R,L⁆ M'
N N₂ : LieSubmodule R L M
N' : LieSubmodule R L M'
⊢ comap N.incl N₂ = ⊥ ↔ N ⊓ N₂ = ⊥
state_after: no goals
Theorem: WeierstrassCurve.preΨ_ne_zero
File: Mathlib/AlgebraicGeometry/EllipticCurve/DivisionPolynomial/Degree.lean

tactic: induction n using Int.negInduction with
| nat n => simpa only [preΨ_ofNat] using W.preΨ'_ne_zero <| by exact_mod_cast h
| neg n ih => simpa only [preΨ_neg, neg_ne_zero] using ih <| neg_ne_zero.mp <| by exact_mod_cast h
state_before: R : Type u
inst✝¹ : CommRing R
W : WeierstrassCurve R
inst✝ : Nontrivial R
n : ℤ
h : ↑n ≠ 0
⊢ W.preΨ n ≠ 0
state_after: no goals

tactic: simpa only [preΨ_ofNat] using W.preΨ'_ne_zero <| by exact_mod_cast h
state_before: case nat
R : Type u
inst✝¹ : CommRing R
W : WeierstrassCurve R
inst✝ : Nontrivial R
n : ℕ
h : ↑↑n ≠ 0
⊢ W.preΨ ↑n ≠ 0
state_after: no goals

tactic: exact_mod_cast h
state_before: R : Type u
inst✝¹ : CommRing R
W : WeierstrassCurve R
inst✝ : Nontrivial R
n : ℕ
h : ↑↑n ≠ 0
⊢ ↑n ≠ 0
state_after: no goals

tactic: simpa only [preΨ_neg, neg_ne_zero] using ih <| neg_ne_zero.mp <| by exact_mod_cast h
state_before: case neg
R : Type u
inst✝¹ : CommRing R
W : WeierstrassCurve R
inst✝ : Nontrivial R
n : ℕ
ih : ↑↑n ≠ 0 → W.preΨ ↑n ≠ 0
h : ↑(-↑n) ≠ 0
⊢ W.preΨ (-↑n) ≠ 0
state_after: no goals

tactic: exact_mod_cast h
state_before: R : Type u
inst✝¹ : CommRing R
W : WeierstrassCurve R
inst✝ : Nontrivial R
n : ℕ
ih : ↑↑n ≠ 0 → W.preΨ ↑n ≠ 0
h : ↑(-↑n) ≠ 0
⊢ -↑↑n ≠ 0
state_after: no goals
Theorem: Real.nat_sqrt_le_real_sqrt
File: Mathlib/Data/Real/Sqrt.lean

tactic: rw [Real.le_sqrt (Nat.cast_nonneg _) (Nat.cast_nonneg _)]
state_before: x✝ y✝ x y : ℝ
a : ℕ
⊢ ↑a.sqrt ≤ √↑a
state_after: x✝ y✝ x y : ℝ
a : ℕ
⊢ ↑a.sqrt ^ 2 ≤ ↑a

tactic: norm_cast
state_before: x✝ y✝ x y : ℝ
a : ℕ
⊢ ↑a.sqrt ^ 2 ≤ ↑a
state_after: x✝ y✝ x y : ℝ
a : ℕ
⊢ a.sqrt ^ 2 ≤ a

tactic: exact Nat.sqrt_le' a
state_before: x✝ y✝ x y : ℝ
a : ℕ
⊢ a.sqrt ^ 2 ≤ a
state_after: no goals
Theorem: Orientation.rotation_map
File: Mathlib/Geometry/Euclidean/Angle/Oriented/Rotation.lean

tactic: simp [rotation_apply, o.rightAngleRotation_map]
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)
θ : Real.Angle
f : V ≃ₗᵢ[ℝ] V'
x : V'
⊢ (((map (Fin 2) f.toLinearEquiv) o).rotation θ) x = f ((o.rotation θ) (f.symm x))
state_after: no goals
Theorem: List.length_bind
File: Mathlib/Algebra/BigOperators/Group/List.lean

tactic: rw [List.bind, length_join, map_map]
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
M : Type u_4
N : Type u_5
P : Type u_6
G : Type u_7
l : List α
f : α → List β
⊢ (l.bind f).length = (map (length ∘ f) l).sum
state_after: no goals
Theorem: ComputablePred.computable_iff_re_compl_re'
File: Mathlib/Computability/Halting.lean

tactic: classical exact computable_iff_re_compl_re
state_before: α : Type u_1
σ : Type u_2
inst✝¹ : Primcodable α
inst✝ : Primcodable σ
p : α → Prop
⊢ ComputablePred p ↔ RePred p ∧ RePred fun a => ¬p a
state_after: no goals

tactic: exact computable_iff_re_compl_re
state_before: α : Type u_1
σ : Type u_2
inst✝¹ : Primcodable α
inst✝ : Primcodable σ
p : α → Prop
⊢ ComputablePred p ↔ RePred p ∧ RePred fun a => ¬p a
state_after: no goals
Theorem: List.dedup_cons_of_not_mem'
File: Mathlib/Data/List/Dedup.lean

tactic: simpa only [forall_mem_ne] using h
state_before: α : Type u
inst✝ : DecidableEq α
a : α
l : List α
h : a ∉ l.dedup
⊢ ∀ b ∈ pwFilter (fun x x_1 => x ≠ x_1) l, a ≠ b
state_after: no goals
Theorem: UniformInducing.uniformContinuousConstSMul
File: Mathlib/Topology/Algebra/UniformMulAction.lean

tactic: simpa only [hf.uniformContinuous_iff, Function.comp_def, hsmul]
  using hf.uniformContinuous.const_smul c
state_before: R : Type u
M : Type v
N : Type w
X : Type x
Y : Type y
inst✝⁴ : UniformSpace X
inst✝³ : UniformSpace Y
inst✝² : SMul M X
inst✝¹ : SMul M Y
inst✝ : UniformContinuousConstSMul M Y
f : X → Y
hf : UniformInducing f
hsmul : ∀ (c : M) (x : X), f (c • x) = c • f x
c : M
⊢ UniformContinuous fun x => c • x
state_after: no goals
Theorem: CochainComplex.HomComplex.Cochain.shift_zero
File: Mathlib/Algebra/Homology/HomotopyCategory/HomComplexShift.lean

tactic: change shiftAddHom K L n a 0 = 0
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
R : Type u_1
inst✝¹ : Ring R
inst✝ : Linear R C
K L M : CochainComplex C ℤ
n : ℤ
γ γ₁ γ₂ : Cochain K L n
a : ℤ
⊢ shift 0 a = 0
state_after: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
R : Type u_1
inst✝¹ : Ring R
inst✝ : Linear R C
K L M : CochainComplex C ℤ
n : ℤ
γ γ₁ γ₂ : Cochain K L n
a : ℤ
⊢ (shiftAddHom K L n a) 0 = 0

tactic: apply _root_.map_zero
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
R : Type u_1
inst✝¹ : Ring R
inst✝ : Linear R C
K L M : CochainComplex C ℤ
n : ℤ
γ γ₁ γ₂ : Cochain K L n
a : ℤ
⊢ (shiftAddHom K L n a) 0 = 0
state_after: no goals
Theorem: rank_finsupp'
File: Mathlib/LinearAlgebra/Dimension/Constructions.lean

tactic: simp [rank_finsupp]
state_before: R S : Type u
M : Type v
M' : Type v'
M₁ : Type v
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type u_1
inst✝¹⁰ : Ring R
inst✝⁹ : CommRing S
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : StrongRankCondition R
inst✝¹ : Module.Free R M
inst✝ : Module.Free R M'
ι : Type v
⊢ Module.rank R (ι →₀ M) = #ι * Module.rank R M
state_after: no goals
Theorem: HomologicalComplex.isIso_iCycles
File: Mathlib/Algebra/Homology/ShortComplex/HomologicalComplex.lean

tactic: subst hj
state_before: C : Type u_1
inst✝² : Category.{u_3, u_1} C
inst✝¹ : HasZeroMorphisms C
ι : Type u_2
c : ComplexShape ι
K L : HomologicalComplex C c
i j k : ι
hj : c.next i = j
h : K.d i j = 0
inst✝ : K.HasHomology i
⊢ IsIso (K.iCycles i)
state_after: C : Type u_1
inst✝² : Category.{u_3, u_1} C
inst✝¹ : HasZeroMorphisms C
ι : Type u_2
c : ComplexShape ι
K L : HomologicalComplex C c
i k : ι
inst✝ : K.HasHomology i
h : K.d i (c.next i) = 0
⊢ IsIso (K.iCycles i)

tactic: exact ShortComplex.isIso_iCycles _ h
state_before: C : Type u_1
inst✝² : Category.{u_3, u_1} C
inst✝¹ : HasZeroMorphisms C
ι : Type u_2
c : ComplexShape ι
K L : HomologicalComplex C c
i k : ι
inst✝ : K.HasHomology i
h : K.d i (c.next i) = 0
⊢ IsIso (K.iCycles i)
state_after: no goals
Theorem: Nat.even_pow
File: Mathlib/Algebra/Group/Nat.lean

tactic: induction' n with n ih <;> simp (config := { contextual := true }) [*, pow_succ', even_mul]
state_before: m n : ℕ
⊢ Even (m ^ n) ↔ Even m ∧ n ≠ 0
state_after: no goals
Theorem: Submodule.inf_orthogonal_eq_bot
File: Mathlib/Analysis/InnerProductSpace/Orthogonal.lean

tactic: rw [eq_bot_iff]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
⊢ K ⊓ Kᗮ = ⊥
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
⊢ K ⊓ Kᗮ ≤ ⊥

tactic: intro x
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
⊢ K ⊓ Kᗮ ≤ ⊥
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
x : E
⊢ x ∈ K ⊓ Kᗮ → x ∈ ⊥

tactic: rw [mem_inf]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
x : E
⊢ x ∈ K ⊓ Kᗮ → x ∈ ⊥
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
x : E
⊢ x ∈ K ∧ x ∈ Kᗮ → x ∈ ⊥

tactic: exact fun ⟨hx, ho⟩ => inner_self_eq_zero.1 (ho x hx)
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
x : E
⊢ x ∈ K ∧ x ∈ Kᗮ → x ∈ ⊥
state_after: no goals
Theorem: ArithmeticFunction.card_divisors
File: Mathlib/NumberTheory/ArithmeticFunction.lean

tactic: rw [← sigma_zero_apply, isMultiplicative_sigma.multiplicative_factorization _ hnne0]
state_before: R : Type u_1
n : ℕ
hnne0 : n ≠ 0
⊢ n.divisors.card = ∏ x ∈ n.primeFactors, (n.factorization x + 1)
state_after: R : Type u_1
n : ℕ
hnne0 : n ≠ 0
⊢ (n.factorization.prod fun p k => (σ 0) (p ^ k)) = ∏ x ∈ n.primeFactors, (n.factorization x + 1)

tactic: exact Finset.prod_congr n.support_factorization fun _ h =>
  sigma_zero_apply_prime_pow <| Nat.prime_of_mem_primeFactors h
state_before: R : Type u_1
n : ℕ
hnne0 : n ≠ 0
⊢ (n.factorization.prod fun p k => (σ 0) (p ^ k)) = ∏ x ∈ n.primeFactors, (n.factorization x + 1)
state_after: no goals
Theorem: Int.range_castAddHom
File: Mathlib/Algebra/Group/Subgroup/ZPowers.lean

tactic: ext a
state_before: G : Type u_1
inst✝³ : Group G
A✝ : Type u_2
inst✝² : AddGroup A✝
N : Type u_3
inst✝¹ : Group N
A : Type u_4
inst✝ : AddGroupWithOne A
⊢ (castAddHom A).range = AddSubgroup.zmultiples 1
state_after: case h
G : Type u_1
inst✝³ : Group G
A✝ : Type u_2
inst✝² : AddGroup A✝
N : Type u_3
inst✝¹ : Group N
A : Type u_4
inst✝ : AddGroupWithOne A
a : A
⊢ a ∈ (castAddHom A).range ↔ a ∈ AddSubgroup.zmultiples 1

tactic: simp_rw [AddMonoidHom.mem_range, Int.coe_castAddHom, AddSubgroup.mem_zmultiples_iff, zsmul_one]
state_before: case h
G : Type u_1
inst✝³ : Group G
A✝ : Type u_2
inst✝² : AddGroup A✝
N : Type u_3
inst✝¹ : Group N
A : Type u_4
inst✝ : AddGroupWithOne A
a : A
⊢ a ∈ (castAddHom A).range ↔ a ∈ AddSubgroup.zmultiples 1
state_after: no goals
Theorem: Cardinal.zero_lt_lift_iff
File: Mathlib/SetTheory/Cardinal/Basic.lean

tactic: simpa using nat_lt_lift_iff (n := 0)
state_before: α β : Type u
a : Cardinal.{u}
⊢ 0 < lift.{v, u} a ↔ 0 < a
state_after: no goals
Theorem: ArithmeticFunction.cardDistinctFactors_eq_cardFactors_iff_squarefree
File: Mathlib/NumberTheory/ArithmeticFunction.lean

tactic: rw [squarefree_iff_nodup_factors h0, cardDistinctFactors_apply]
state_before: R : Type u_1
n : ℕ
h0 : n ≠ 0
⊢ ω n = Ω n ↔ Squarefree n
state_after: R : Type u_1
n : ℕ
h0 : n ≠ 0
⊢ n.factors.dedup.length = Ω n ↔ n.factors.Nodup

tactic: constructor <;> intro h
state_before: R : Type u_1
n : ℕ
h0 : n ≠ 0
⊢ n.factors.dedup.length = Ω n ↔ n.factors.Nodup
state_after: case mp
R : Type u_1
n : ℕ
h0 : n ≠ 0
h : n.factors.dedup.length = Ω n
⊢ n.factors.Nodup

case mpr
R : Type u_1
n : ℕ
h0 : n ≠ 0
h : n.factors.Nodup
⊢ n.factors.dedup.length = Ω n

tactic: rw [← n.factors.dedup_sublist.eq_of_length h]
state_before: case mp
R : Type u_1
n : ℕ
h0 : n ≠ 0
h : n.factors.dedup.length = Ω n
⊢ n.factors.Nodup
state_after: case mp
R : Type u_1
n : ℕ
h0 : n ≠ 0
h : n.factors.dedup.length = Ω n
⊢ n.factors.dedup.Nodup

tactic: apply List.nodup_dedup
state_before: case mp
R : Type u_1
n : ℕ
h0 : n ≠ 0
h : n.factors.dedup.length = Ω n
⊢ n.factors.dedup.Nodup
state_after: no goals

tactic: rw [h.dedup]
state_before: case mpr
R : Type u_1
n : ℕ
h0 : n ≠ 0
h : n.factors.Nodup
⊢ n.factors.dedup.length = Ω n
state_after: case mpr
R : Type u_1
n : ℕ
h0 : n ≠ 0
h : n.factors.Nodup
⊢ n.factors.length = Ω n

tactic: rfl
state_before: case mpr
R : Type u_1
n : ℕ
h0 : n ≠ 0
h : n.factors.Nodup
⊢ n.factors.length = Ω n
state_after: no goals
Theorem: List.join_filter_not_isEmpty
File: Mathlib/Data/List/Join.lean

tactic: simp [join_filter_not_isEmpty (L := L), isEmpty_iff_eq_nil]
state_before: α : Type u_1
β : Type u_2
L : List (List α)
⊢ (filter (fun l => !l.isEmpty) ([] :: L)).join = ([] :: L).join
state_after: no goals

tactic: simp [join_filter_not_isEmpty (L := L)]
state_before: α : Type u_1
β : Type u_2
a : α
l : List α
L : List (List α)
⊢ (filter (fun l => !l.isEmpty) ((a :: l) :: L)).join = ((a :: l) :: L).join
state_after: no goals
Theorem: Sylow.card_normalizer_modEq_card
File: Mathlib/GroupTheory/Sylow.lean

tactic: have : H.subgroupOf (normalizer H) ≃ H := (subgroupOfEquivOfLe le_normalizer).toEquiv
state_before: G : Type u
α : Type v
β : Type w
inst✝¹ : Group G
inst✝ : Fintype G
p n : ℕ
hp : Fact (Nat.Prime p)
H : Subgroup G
hH : Fintype.card ↥H = p ^ n
⊢ Fintype.card ↥H.normalizer ≡ Fintype.card G [MOD p ^ (n + 1)]
state_after: G : Type u
α : Type v
β : Type w
inst✝¹ : Group G
inst✝ : Fintype G
p n : ℕ
hp : Fact (Nat.Prime p)
H : Subgroup G
hH : Fintype.card ↥H = p ^ n
this : ↥(H.subgroupOf H.normalizer) ≃ ↥H
⊢ Fintype.card ↥H.normalizer ≡ Fintype.card G [MOD p ^ (n + 1)]

tactic: simp only [← Nat.card_eq_fintype_card] at hH ⊢
state_before: G : Type u
α : Type v
β : Type w
inst✝¹ : Group G
inst✝ : Fintype G
p n : ℕ
hp : Fact (Nat.Prime p)
H : Subgroup G
hH : Fintype.card ↥H = p ^ n
this : ↥(H.subgroupOf H.normalizer) ≃ ↥H
⊢ Fintype.card ↥H.normalizer ≡ Fintype.card G [MOD p ^ (n + 1)]
state_after: G : Type u
α : Type v
β : Type w
inst✝¹ : Group G
inst✝ : Fintype G
p n : ℕ
hp : Fact (Nat.Prime p)
H : Subgroup G
this : ↥(H.subgroupOf H.normalizer) ≃ ↥H
hH : Nat.card ↥H = p ^ n
⊢ Nat.card ↥H.normalizer ≡ Nat.card G [MOD p ^ (n + 1)]

tactic: rw [card_eq_card_quotient_mul_card_subgroup H,
  card_eq_card_quotient_mul_card_subgroup (H.subgroupOf (normalizer H)), Nat.card_congr this,
  hH, pow_succ']
state_before: G : Type u
α : Type v
β : Type w
inst✝¹ : Group G
inst✝ : Fintype G
p n : ℕ
hp : Fact (Nat.Prime p)
H : Subgroup G
this : ↥(H.subgroupOf H.normalizer) ≃ ↥H
hH : Nat.card ↥H = p ^ n
⊢ Nat.card ↥H.normalizer ≡ Nat.card G [MOD p ^ (n + 1)]
state_after: G : Type u
α : Type v
β : Type w
inst✝¹ : Group G
inst✝ : Fintype G
p n : ℕ
hp : Fact (Nat.Prime p)
H : Subgroup G
this : ↥(H.subgroupOf H.normalizer) ≃ ↥H
hH : Nat.card ↥H = p ^ n
⊢ Nat.card (↥H.normalizer ⧸ H.subgroupOf H.normalizer) * p ^ n ≡ Nat.card (G ⧸ H) * p ^ n [MOD p * p ^ n]

tactic: simp only [Nat.card_eq_fintype_card] at hH ⊢
state_before: G : Type u
α : Type v
β : Type w
inst✝¹ : Group G
inst✝ : Fintype G
p n : ℕ
hp : Fact (Nat.Prime p)
H : Subgroup G
this : ↥(H.subgroupOf H.normalizer) ≃ ↥H
hH : Nat.card ↥H = p ^ n
⊢ Nat.card (↥H.normalizer ⧸ H.subgroupOf H.normalizer) * p ^ n ≡ Nat.card (G ⧸ H) * p ^ n [MOD p * p ^ n]
state_after: G : Type u
α : Type v
β : Type w
inst✝¹ : Group G
inst✝ : Fintype G
p n : ℕ
hp : Fact (Nat.Prime p)
H : Subgroup G
this : ↥(H.subgroupOf H.normalizer) ≃ ↥H
hH : Fintype.card ↥H = p ^ n
⊢ Fintype.card (↥H.normalizer ⧸ H.subgroupOf H.normalizer) * p ^ n ≡ Fintype.card (G ⧸ H) * p ^ n [MOD p * p ^ n]

tactic: exact (card_quotient_normalizer_modEq_card_quotient hH).mul_right' _
state_before: G : Type u
α : Type v
β : Type w
inst✝¹ : Group G
inst✝ : Fintype G
p n : ℕ
hp : Fact (Nat.Prime p)
H : Subgroup G
this : ↥(H.subgroupOf H.normalizer) ≃ ↥H
hH : Fintype.card ↥H = p ^ n
⊢ Fintype.card (↥H.normalizer ⧸ H.subgroupOf H.normalizer) * p ^ n ≡ Fintype.card (G ⧸ H) * p ^ n [MOD p * p ^ n]
state_after: no goals