l3lab/ntp-mathlib huggingface dataset:
@[simp]
theorem coe_nsmul (s : Cₛ^n⟮I; F, V⟯) (k : ℕ) : ⇑(k • s : Cₛ^n⟮I; F, V⟯) = k • ⇑s := by
  induction' k with k ih
  · simp_rw [Nat.zero_eq, zero_smul]; rfl
  

Proof state:
case succ
𝕜 : Type u_1
inst✝²⁵ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝²⁴ : NormedAddCommGroup E
inst✝²³ : NormedSpace 𝕜 E
E' : Type u_3
inst✝²² : NormedAddCommGroup E'
inst✝²¹ : NormedSpace 𝕜 E'
H : Type u_4
inst✝²⁰ : TopologicalSpace H
H' : Type u_5
inst✝¹⁹ : TopologicalSpace H'
I : ModelWithCorners 𝕜 E H
I' : ModelWithCorners 𝕜 E' H'
M : Type u_6
inst✝¹⁸ : TopologicalSpace M
inst✝¹⁷ : ChartedSpace H M
M' : Type u_7
inst✝¹⁶ : TopologicalSpace M'
inst✝¹⁵ : ChartedSpace H' M'
E'' : Type u_8
inst✝¹⁴ : NormedAddCommGroup E''
inst✝¹³ : NormedSpace 𝕜 E''
H'' : Type u_9
inst✝¹² : TopologicalSpace H''
I'' : ModelWithCorners 𝕜 E'' H''
M'' : Type u_10
inst✝¹¹ : TopologicalSpace M''
inst✝¹⁰ : ChartedSpace H'' M''
inst✝⁹ : SmoothManifoldWithCorners I M
F : Type u_11
inst✝⁸ : NormedAddCommGroup F
inst✝⁷ : NormedSpace 𝕜 F
n : ℕ∞
V : M → Type u_12
inst✝⁶ : TopologicalSpace (TotalSpace F V)
inst✝⁵ : (x : M) → AddCommGroup (V x)
inst✝⁴ : (x : M) → Module 𝕜 (V x)
inst✝³ : (x : M) → TopologicalSpace (V x)
inst✝² : FiberBundle F V
inst✝¹ : VectorBundle 𝕜 F V
inst✝ : SmoothVectorBundle F V I
s✝ t s : Cₛ^n⟮I; F, V⟯
k : ℕ
ih : ⇑(k • s) = k • ⇑s
⊢ ⇑(Nat.succ k • s) = Nat.succ k • ⇑s

Next tactic:
simp_rw [succ_nsmul, ← ih]
@[simp]
theorem coe_nsmul (s : Cₛ^n⟮I; F, V⟯) (k : ℕ) : ⇑(k • s : Cₛ^n⟮I; F, V⟯) = k • ⇑s := by
  induction' k with k ih
  · simp_rw [Nat.zero_eq, zero_smul]; rfl
  simp_rw [succ_nsmul, ← ih]; 

Proof state:
case succ
𝕜 : Type u_1
inst✝²⁵ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝²⁴ : NormedAddCommGroup E
inst✝²³ : NormedSpace 𝕜 E
E' : Type u_3
inst✝²² : NormedAddCommGroup E'
inst✝²¹ : NormedSpace 𝕜 E'
H : Type u_4
inst✝²⁰ : TopologicalSpace H
H' : Type u_5
inst✝¹⁹ : TopologicalSpace H'
I : ModelWithCorners 𝕜 E H
I' : ModelWithCorners 𝕜 E' H'
M : Type u_6
inst✝¹⁸ : TopologicalSpace M
inst✝¹⁷ : ChartedSpace H M
M' : Type u_7
inst✝¹⁶ : TopologicalSpace M'
inst✝¹⁵ : ChartedSpace H' M'
E'' : Type u_8
inst✝¹⁴ : NormedAddCommGroup E''
inst✝¹³ : NormedSpace 𝕜 E''
H'' : Type u_9
inst✝¹² : TopologicalSpace H''
I'' : ModelWithCorners 𝕜 E'' H''
M'' : Type u_10
inst✝¹¹ : TopologicalSpace M''
inst✝¹⁰ : ChartedSpace H'' M''
inst✝⁹ : SmoothManifoldWithCorners I M
F : Type u_11
inst✝⁸ : NormedAddCommGroup F
inst✝⁷ : NormedSpace 𝕜 F
n : ℕ∞
V : M → Type u_12
inst✝⁶ : TopologicalSpace (TotalSpace F V)
inst✝⁵ : (x : M) → AddCommGroup (V x)
inst✝⁴ : (x : M) → Module 𝕜 (V x)
inst✝³ : (x : M) → TopologicalSpace (V x)
inst✝² : FiberBundle F V
inst✝¹ : VectorBundle 𝕜 F V
inst✝ : SmoothVectorBundle F V I
s✝ t s : Cₛ^n⟮I; F, V⟯
k : ℕ
ih : ⇑(k • s) = k • ⇑s
⊢ ⇑(Nat.succ k • s) = ⇑s + ⇑(k • s)

Next tactic:
rfl
@[simp]
theorem coe_zsmul (s : Cₛ^n⟮I; F, V⟯) (z : ℤ) : ⇑(z • s : Cₛ^n⟮I; F, V⟯) = z • ⇑s := by
  

Proof state:
𝕜 : Type u_1
inst✝²⁵ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝²⁴ : NormedAddCommGroup E
inst✝²³ : NormedSpace 𝕜 E
E' : Type u_3
inst✝²² : NormedAddCommGroup E'
inst✝²¹ : NormedSpace 𝕜 E'
H : Type u_4
inst✝²⁰ : TopologicalSpace H
H' : Type u_5
inst✝¹⁹ : TopologicalSpace H'
I : ModelWithCorners 𝕜 E H
I' : ModelWithCorners 𝕜 E' H'
M : Type u_6
inst✝¹⁸ : TopologicalSpace M
inst✝¹⁷ : ChartedSpace H M
M' : Type u_7
inst✝¹⁶ : TopologicalSpace M'
inst✝¹⁵ : ChartedSpace H' M'
E'' : Type u_8
inst✝¹⁴ : NormedAddCommGroup E''
inst✝¹³ : NormedSpace 𝕜 E''
H'' : Type u_9
inst✝¹² : TopologicalSpace H''
I'' : ModelWithCorners 𝕜 E'' H''
M'' : Type u_10
inst✝¹¹ : TopologicalSpace M''
inst✝¹⁰ : ChartedSpace H'' M''
inst✝⁹ : SmoothManifoldWithCorners I M
F : Type u_11
inst✝⁸ : NormedAddCommGroup F
inst✝⁷ : NormedSpace 𝕜 F
n : ℕ∞
V : M → Type u_12
inst✝⁶ : TopologicalSpace (TotalSpace F V)
inst✝⁵ : (x : M) → AddCommGroup (V x)
inst✝⁴ : (x : M) → Module 𝕜 (V x)
inst✝³ : (x : M) → TopologicalSpace (V x)
inst✝² : FiberBundle F V
inst✝¹ : VectorBundle 𝕜 F V
inst✝ : SmoothVectorBundle F V I
s✝ t s : Cₛ^n⟮I; F, V⟯
z : ℤ
⊢ ⇑(z • s) = z • ⇑s

Next tactic:
cases' z with n n
@[simp]
theorem coe_zsmul (s : Cₛ^n⟮I; F, V⟯) (z : ℤ) : ⇑(z • s : Cₛ^n⟮I; F, V⟯) = z • ⇑s := by
  cases' z with n n
  

Proof state:
case ofNat
𝕜 : Type u_1
inst✝²⁵ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝²⁴ : NormedAddCommGroup E
inst✝²³ : NormedSpace 𝕜 E
E' : Type u_3
inst✝²² : NormedAddCommGroup E'
inst✝²¹ : NormedSpace 𝕜 E'
H : Type u_4
inst✝²⁰ : TopologicalSpace H
H' : Type u_5
inst✝¹⁹ : TopologicalSpace H'
I : ModelWithCorners 𝕜 E H
I' : ModelWithCorners 𝕜 E' H'
M : Type u_6
inst✝¹⁸ : TopologicalSpace M
inst✝¹⁷ : ChartedSpace H M
M' : Type u_7
inst✝¹⁶ : TopologicalSpace M'
inst✝¹⁵ : ChartedSpace H' M'
E'' : Type u_8
inst✝¹⁴ : NormedAddCommGroup E''
inst✝¹³ : NormedSpace 𝕜 E''
H'' : Type u_9
inst✝¹² : TopologicalSpace H''
I'' : ModelWithCorners 𝕜 E'' H''
M'' : Type u_10
inst✝¹¹ : TopologicalSpace M''
inst✝¹⁰ : ChartedSpace H'' M''
inst✝⁹ : SmoothManifoldWithCorners I M
F : Type u_11
inst✝⁸ : NormedAddCommGroup F
inst✝⁷ : NormedSpace 𝕜 F
n✝ : ℕ∞
V : M → Type u_12
inst✝⁶ : TopologicalSpace (TotalSpace F V)
inst✝⁵ : (x : M) → AddCommGroup (V x)
inst✝⁴ : (x : M) → Module 𝕜 (V x)
inst✝³ : (x : M) → TopologicalSpace (V x)
inst✝² : FiberBundle F V
inst✝¹ : VectorBundle 𝕜 F V
inst✝ : SmoothVectorBundle F V I
s✝ t s : Cₛ^n✝⟮I; F, V⟯
n : ℕ
⊢ ⇑(Int.ofNat n • s) = Int.ofNat n • ⇑s
case negSucc
𝕜 : Type u_1
inst✝²⁵ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝²⁴ : NormedAddCommGroup E
inst✝²³ : NormedSpace 𝕜 E
E' : Type u_3
inst✝²² : NormedAddCommGroup E'
inst✝²¹ : NormedSpace 𝕜 E'
H : Type u_4
inst✝²⁰ : TopologicalSpace H
H' : Type u_5
inst✝¹⁹ : TopologicalSpace H'
I : ModelWithCorners 𝕜 E H
I' : ModelWithCorners 𝕜 E' H'
M : Type u_6
inst✝¹⁸ : TopologicalSpace M
inst✝¹⁷ : ChartedSpace H M
M' : Type u_7
inst✝¹⁶ : TopologicalSpace M'
inst✝¹⁵ : ChartedSpace H' M'
E'' : Type u_8
inst✝¹⁴ : NormedAddCommGroup E''
inst✝¹³ : NormedSpace 𝕜 E''
H'' : Type u_9
inst✝¹² : TopologicalSpace H''
I'' : ModelWithCorners 𝕜 E'' H''
M'' : Type u_10
inst✝¹¹ : TopologicalSpace M''
inst✝¹⁰ : ChartedSpace H'' M''
inst✝⁹ : SmoothManifoldWithCorners I M
F : Type u_11
inst✝⁸ : NormedAddCommGroup F
inst✝⁷ : NormedSpace 𝕜 F
n✝ : ℕ∞
V : M → Type u_12
inst✝⁶ : TopologicalSpace (TotalSpace F V)
inst✝⁵ : (x : M) → AddCommGroup (V x)
inst✝⁴ : (x : M) → Module 𝕜 (V x)
inst✝³ : (x : M) → TopologicalSpace (V x)
inst✝² : FiberBundle F V
inst✝¹ : VectorBundle 𝕜 F V
inst✝ : SmoothVectorBundle F V I
s✝ t s : Cₛ^n✝⟮I; F, V⟯
n : ℕ
⊢ ⇑(Int.negSucc n • s) = Int.negSucc n • ⇑s

Next tactic:
refine' (coe_nsmul s n).trans _
@[simp]
theorem coe_zsmul (s : Cₛ^n⟮I; F, V⟯) (z : ℤ) : ⇑(z • s : Cₛ^n⟮I; F, V⟯) = z • ⇑s := by
  cases' z with n n
  refine' (coe_nsmul s n).trans _
  

Proof state:
case ofNat
𝕜 : Type u_1
inst✝²⁵ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝²⁴ : NormedAddCommGroup E
inst✝²³ : NormedSpace 𝕜 E
E' : Type u_3
inst✝²² : NormedAddCommGroup E'
inst✝²¹ : NormedSpace 𝕜 E'
H : Type u_4
inst✝²⁰ : TopologicalSpace H
H' : Type u_5
inst✝¹⁹ : TopologicalSpace H'
I : ModelWithCorners 𝕜 E H
I' : ModelWithCorners 𝕜 E' H'
M : Type u_6
inst✝¹⁸ : TopologicalSpace M
inst✝¹⁷ : ChartedSpace H M
M' : Type u_7
inst✝¹⁶ : TopologicalSpace M'
inst✝¹⁵ : ChartedSpace H' M'
E'' : Type u_8
inst✝¹⁴ : NormedAddCommGroup E''
inst✝¹³ : NormedSpace 𝕜 E''
H'' : Type u_9
inst✝¹² : TopologicalSpace H''
I'' : ModelWithCorners 𝕜 E'' H''
M'' : Type u_10
inst✝¹¹ : TopologicalSpace M''
inst✝¹⁰ : ChartedSpace H'' M''
inst✝⁹ : SmoothManifoldWithCorners I M
F : Type u_11
inst✝⁸ : NormedAddCommGroup F
inst✝⁷ : NormedSpace 𝕜 F
n✝ : ℕ∞
V : M → Type u_12
inst✝⁶ : TopologicalSpace (TotalSpace F V)
inst✝⁵ : (x : M) → AddCommGroup (V x)
inst✝⁴ : (x : M) → Module 𝕜 (V x)
inst✝³ : (x : M) → TopologicalSpace (V x)
inst✝² : FiberBundle F V
inst✝¹ : VectorBundle 𝕜 F V
inst✝ : SmoothVectorBundle F V I
s✝ t s : Cₛ^n✝⟮I; F, V⟯
n : ℕ
⊢ n • ⇑s = Int.ofNat n • ⇑s
case negSucc
𝕜 : Type u_1
inst✝²⁵ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝²⁴ : NormedAddCommGroup E
inst✝²³ : NormedSpace 𝕜 E
E' : Type u_3
inst✝²² : NormedAddCommGroup E'
inst✝²¹ : NormedSpace 𝕜 E'
H : Type u_4
inst✝²⁰ : TopologicalSpace H
H' : Type u_5
inst✝¹⁹ : TopologicalSpace H'
I : ModelWithCorners 𝕜 E H
I' : ModelWithCorners 𝕜 E' H'
M : Type u_6
inst✝¹⁸ : TopologicalSpace M
inst✝¹⁷ : ChartedSpace H M
M' : Type u_7
inst✝¹⁶ : TopologicalSpace M'
inst✝¹⁵ : ChartedSpace H' M'
E'' : Type u_8
inst✝¹⁴ : NormedAddCommGroup E''
inst✝¹³ : NormedSpace 𝕜 E''
H'' : Type u_9
inst✝¹² : TopologicalSpace H''
I'' : ModelWithCorners 𝕜 E'' H''
M'' : Type u_10
inst✝¹¹ : TopologicalSpace M''
inst✝¹⁰ : ChartedSpace H'' M''
inst✝⁹ : SmoothManifoldWithCorners I M
F : Type u_11
inst✝⁸ : NormedAddCommGroup F
inst✝⁷ : NormedSpace 𝕜 F
n✝ : ℕ∞
V : M → Type u_12
inst✝⁶ : TopologicalSpace (TotalSpace F V)
inst✝⁵ : (x : M) → AddCommGroup (V x)
inst✝⁴ : (x : M) → Module 𝕜 (V x)
inst✝³ : (x : M) → TopologicalSpace (V x)
inst✝² : FiberBundle F V
inst✝¹ : VectorBundle 𝕜 F V
inst✝ : SmoothVectorBundle F V I
s✝ t s : Cₛ^n✝⟮I; F, V⟯
n : ℕ
⊢ ⇑(Int.negSucc n • s) = Int.negSucc n • ⇑s

Next tactic:
simp only [Int.ofNat_eq_coe, coe_nat_zsmul]
@[simp]
theorem coe_zsmul (s : Cₛ^n⟮I; F, V⟯) (z : ℤ) : ⇑(z • s : Cₛ^n⟮I; F, V⟯) = z • ⇑s := by
  cases' z with n n
  refine' (coe_nsmul s n).trans _
  simp only [Int.ofNat_eq_coe, coe_nat_zsmul]
  

Proof state:
case negSucc
𝕜 : Type u_1
inst✝²⁵ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝²⁴ : NormedAddCommGroup E
inst✝²³ : NormedSpace 𝕜 E
E' : Type u_3
inst✝²² : NormedAddCommGroup E'
inst✝²¹ : NormedSpace 𝕜 E'
H : Type u_4
inst✝²⁰ : TopologicalSpace H
H' : Type u_5
inst✝¹⁹ : TopologicalSpace H'
I : ModelWithCorners 𝕜 E H
I' : ModelWithCorners 𝕜 E' H'
M : Type u_6
inst✝¹⁸ : TopologicalSpace M
inst✝¹⁷ : ChartedSpace H M
M' : Type u_7
inst✝¹⁶ : TopologicalSpace M'
inst✝¹⁵ : ChartedSpace H' M'
E'' : Type u_8
inst✝¹⁴ : NormedAddCommGroup E''
inst✝¹³ : NormedSpace 𝕜 E''
H'' : Type u_9
inst✝¹² : TopologicalSpace H''
I'' : ModelWithCorners 𝕜 E'' H''
M'' : Type u_10
inst✝¹¹ : TopologicalSpace M''
inst✝¹⁰ : ChartedSpace H'' M''
inst✝⁹ : SmoothManifoldWithCorners I M
F : Type u_11
inst✝⁸ : NormedAddCommGroup F
inst✝⁷ : NormedSpace 𝕜 F
n✝ : ℕ∞
V : M → Type u_12
inst✝⁶ : TopologicalSpace (TotalSpace F V)
inst✝⁵ : (x : M) → AddCommGroup (V x)
inst✝⁴ : (x : M) → Module 𝕜 (V x)
inst✝³ : (x : M) → TopologicalSpace (V x)
inst✝² : FiberBundle F V
inst✝¹ : VectorBundle 𝕜 F V
inst✝ : SmoothVectorBundle F V I
s✝ t s : Cₛ^n✝⟮I; F, V⟯
n : ℕ
⊢ ⇑(Int.negSucc n • s) = Int.negSucc n • ⇑s

Next tactic:
refine' (congr_arg Neg.neg (coe_nsmul s (n + 1))).trans _
@[simp]
theorem coe_zsmul (s : Cₛ^n⟮I; F, V⟯) (z : ℤ) : ⇑(z • s : Cₛ^n⟮I; F, V⟯) = z • ⇑s := by
  cases' z with n n
  refine' (coe_nsmul s n).trans _
  simp only [Int.ofNat_eq_coe, coe_nat_zsmul]
  refine' (congr_arg Neg.neg (coe_nsmul s (n + 1))).trans _
  

Proof state:
case negSucc
𝕜 : Type u_1
inst✝²⁵ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝²⁴ : NormedAddCommGroup E
inst✝²³ : NormedSpace 𝕜 E
E' : Type u_3
inst✝²² : NormedAddCommGroup E'
inst✝²¹ : NormedSpace 𝕜 E'
H : Type u_4
inst✝²⁰ : TopologicalSpace H
H' : Type u_5
inst✝¹⁹ : TopologicalSpace H'
I : ModelWithCorners 𝕜 E H
I' : ModelWithCorners 𝕜 E' H'
M : Type u_6
inst✝¹⁸ : TopologicalSpace M
inst✝¹⁷ : ChartedSpace H M
M' : Type u_7
inst✝¹⁶ : TopologicalSpace M'
inst✝¹⁵ : ChartedSpace H' M'
E'' : Type u_8
inst✝¹⁴ : NormedAddCommGroup E''
inst✝¹³ : NormedSpace 𝕜 E''
H'' : Type u_9
inst✝¹² : TopologicalSpace H''
I'' : ModelWithCorners 𝕜 E'' H''
M'' : Type u_10
inst✝¹¹ : TopologicalSpace M''
inst✝¹⁰ : ChartedSpace H'' M''
inst✝⁹ : SmoothManifoldWithCorners I M
F : Type u_11
inst✝⁸ : NormedAddCommGroup F
inst✝⁷ : NormedSpace 𝕜 F
n✝ : ℕ∞
V : M → Type u_12
inst✝⁶ : TopologicalSpace (TotalSpace F V)
inst✝⁵ : (x : M) → AddCommGroup (V x)
inst✝⁴ : (x : M) → Module 𝕜 (V x)
inst✝³ : (x : M) → TopologicalSpace (V x)
inst✝² : FiberBundle F V
inst✝¹ : VectorBundle 𝕜 F V
inst✝ : SmoothVectorBundle F V I
s✝ t s : Cₛ^n✝⟮I; F, V⟯
n : ℕ
⊢ -((n + 1) • ⇑s) = Int.negSucc n • ⇑s

Next tactic:
simp only [negSucc_zsmul, neg_inj]
@[refl]
protected theorem refl (H : Subgroup G) : Commensurable H H := by 

Proof state:
G : Type u_1
inst✝ : Group G
H : Subgroup G
⊢ Commensurable H H

Next tactic:
simp [Commensurable]
/-- Equivalence of `K/H ⊓ K` with `gKg⁻¹/gHg⁻¹ ⊓ gKg⁻¹`-/
def quotConjEquiv (H K : Subgroup G) (g : ConjAct G) :
    K ⧸ H.subgroupOf K ≃ (g • K).1 ⧸ (g • H).subgroupOf (g • K) :=
  Quotient.congr (K.equivSMul g).toEquiv fun a b => by
    

Proof state:
G : Type u_1
inst✝ : Group G
H K : Subgroup G
g : ConjAct G
a b : ↥K
⊢ Setoid.r a b ↔ Setoid.r ((Subgroup.equivSMul g K).toEquiv a) ((Subgroup.equivSMul g K).toEquiv b)

Next tactic:
dsimp
/-- Equivalence of `K/H ⊓ K` with `gKg⁻¹/gHg⁻¹ ⊓ gKg⁻¹`-/
def quotConjEquiv (H K : Subgroup G) (g : ConjAct G) :
    K ⧸ H.subgroupOf K ≃ (g • K).1 ⧸ (g • H).subgroupOf (g • K) :=
  Quotient.congr (K.equivSMul g).toEquiv fun a b => by
    dsimp
    

Proof state:
G : Type u_1
inst✝ : Group G
H K : Subgroup G
g : ConjAct G
a b : ↥K
⊢ Setoid.r a b ↔ Setoid.r ((Subgroup.equivSMul g K) a) ((Subgroup.equivSMul g K) b)

Next tactic:
rw [← Quotient.eq'', ← Quotient.eq'', QuotientGroup.eq', QuotientGroup.eq',
      Subgroup.mem_subgroupOf, Subgroup.mem_subgroupOf, ← MulEquiv.map_inv, ← MulEquiv.map_mul,
      Subgroup.equivSMul_apply_coe]
/-- Equivalence of `K/H ⊓ K` with `gKg⁻¹/gHg⁻¹ ⊓ gKg⁻¹`-/
def quotConjEquiv (H K : Subgroup G) (g : ConjAct G) :
    K ⧸ H.subgroupOf K ≃ (g • K).1 ⧸ (g • H).subgroupOf (g • K) :=
  Quotient.congr (K.equivSMul g).toEquiv fun a b => by
    dsimp
    rw [← Quotient.eq'', ← Quotient.eq'', QuotientGroup.eq', QuotientGroup.eq',
      Subgroup.mem_subgroupOf, Subgroup.mem_subgroupOf, ← MulEquiv.map_inv, ← MulEquiv.map_mul,
      Subgroup.equivSMul_apply_coe]
    

Proof state:
G : Type u_1
inst✝ : Group G
H K : Subgroup G
g : ConjAct G
a b : ↥K
⊢ ↑(a⁻¹ * b) ∈ H ↔ g • ↑(a⁻¹ * b) ∈ g • H

Next tactic:
exact Subgroup.smul_mem_pointwise_smul_iff.symm
theorem commensurable_inv (H : Subgroup G) (g : ConjAct G) :
    Commensurable (g • H) H ↔ Commensurable H (g⁻¹ • H) := by 

Proof state:
G : Type u_1
inst✝ : Group G
H : Subgroup G
g : ConjAct G
⊢ Commensurable (g • H) H ↔ Commensurable H (g⁻¹ • H)

Next tactic:
rw [commensurable_conj, inv_smul_smul]
/-- For `H` a subgroup of `G`, this is the subgroup of all elements `g : conjAut G`
such that `Commensurable (g • H) H` -/
def commensurator' (H : Subgroup G) : Subgroup (ConjAct G) where
  carrier := { g : ConjAct G | Commensurable (g • H) H }
  one_mem' := by rw [Set.mem_setOf_eq, one_smul]
  mul_mem' ha hb := by
    

Proof state:
G : Type u_1
inst✝ : Group G
H : Subgroup G
a✝ b✝ : ConjAct G
ha : a✝ ∈ {g | Commensurable (g • H) H}
hb : b✝ ∈ {g | Commensurable (g • H) H}
⊢ a✝ * b✝ ∈ {g | Commensurable (g • H) H}

Next tactic:
rw [Set.mem_setOf_eq, mul_smul]
/-- For `H` a subgroup of `G`, this is the subgroup of all elements `g : conjAut G`
such that `Commensurable (g • H) H` -/
def commensurator' (H : Subgroup G) : Subgroup (ConjAct G) where
  carrier := { g : ConjAct G | Commensurable (g • H) H }
  one_mem' := by rw [Set.mem_setOf_eq, one_smul]
  mul_mem' ha hb := by
    rw [Set.mem_setOf_eq, mul_smul]
    

Proof state:
G : Type u_1
inst✝ : Group G
H : Subgroup G
a✝ b✝ : ConjAct G
ha : a✝ ∈ {g | Commensurable (g • H) H}
hb : b✝ ∈ {g | Commensurable (g • H) H}
⊢ Commensurable (a✝ • b✝ • H) H

Next tactic:
exact trans ((commensurable_conj _).mp hb) ha
/-- For `H` a subgroup of `G`, this is the subgroup of all elements `g : conjAut G`
such that `Commensurable (g • H) H` -/
def commensurator' (H : Subgroup G) : Subgroup (ConjAct G) where
  carrier := { g : ConjAct G | Commensurable (g • H) H }
  one_mem' := by 

Proof state:
G : Type u_1
inst✝ : Group G
H : Subgroup G
⊢ 1 ∈
    { carrier := {g | Commensurable (g • H) H},
        mul_mem' :=
          (_ :
            ∀ {a b : ConjAct G},
              a ∈ {g | Commensurable (g • H) H} →
                b ∈ {g | Commensurable (g • H) H} → a * b ∈ {g | Commensurable (g • H) H}) }.carrier

Next tactic:
rw [Set.mem_setOf_eq, one_smul]
/-- For `H` a subgroup of `G`, this is the subgroup of all elements `g : conjAut G`
such that `Commensurable (g • H) H` -/
def commensurator' (H : Subgroup G) : Subgroup (ConjAct G) where
  carrier := { g : ConjAct G | Commensurable (g • H) H }
  one_mem' := by rw [Set.mem_setOf_eq, one_smul]
  mul_mem' ha hb := by
    rw [Set.mem_setOf_eq, mul_smul]
    exact trans ((commensurable_conj _).mp hb) ha
  inv_mem' _ := by 

Proof state:
G : Type u_1
inst✝ : Group G
H : Subgroup G
x✝¹ : ConjAct G
x✝ :
  x✝¹ ∈
    {
          toSubsemigroup :=
            { carrier := {g | Commensurable (g • H) H},
              mul_mem' :=
                (_ :
                  ∀ {a b : ConjAct G},
                    a ∈ {g | Commensurable (g • H) H} →
                      b ∈ {g | Commensurable (g • H) H} → a * b ∈ {g | Commensurable (g • H) H}) },
          one_mem' :=
            (_ :
              1 ∈
                { carrier := {g | Commensurable (g • H) H},
                    mul_mem' :=
                      (_ :
                        ∀ {a b : ConjAct G},
                          a ∈ {g | Commensurable (g • H) H} →
                            b ∈ {g | Commensurable (g • H) H} →
                              a * b ∈ {g | Commensurable (g • H) H}) }.carrier) }.toSubsemigroup.carrier
⊢ x✝¹⁻¹ ∈
    {
          toSubsemigroup :=
            { carrier := {g | Commensurable (g • H) H},
              mul_mem' :=
                (_ :
                  ∀ {a b : ConjAct G},
                    a ∈ {g | Commensurable (g • H) H} →
                      b ∈ {g | Commensurable (g • H) H} → a * b ∈ {g | Commensurable (g • H) H}) },
          one_mem' :=
            (_ :
              1 ∈
                { carrier := {g | Commensurable (g • H) H},
                    mul_mem' :=
                      (_ :
                        ∀ {a b : ConjAct G},
                          a ∈ {g | Commensurable (g • H) H} →
                            b ∈ {g | Commensurable (g • H) H} →
                              a * b ∈ {g | Commensurable (g • H) H}) }.carrier) }.toSubsemigroup.carrier

Next tactic:
rwa [Set.mem_setOf_eq, comm, ← commensurable_inv]
open CompHaus in
lemma generate_singleton_mem_coherentTopology (B : CompHaus) :
    Sieve.generate (Presieve.singleton (presentation.π B)) ∈ coherentTopology CompHaus B := by
  

Proof state:
B : CompHaus
⊢ Sieve.generate (Presieve.singleton (presentation.π B)) ∈ GrothendieckTopology.sieves (coherentTopology CompHaus) B

Next tactic:
apply Coverage.saturate.of
open CompHaus in
lemma generate_singleton_mem_coherentTopology (B : CompHaus) :
    Sieve.generate (Presieve.singleton (presentation.π B)) ∈ coherentTopology CompHaus B := by
  apply Coverage.saturate.of
  

Proof state:
case hS
B : CompHaus
⊢ Presieve.singleton (presentation.π B) ∈ Coverage.covering (coherentCoverage CompHaus) B

Next tactic:
refine ⟨Unit, inferInstance, fun _ => (Stonean.toCompHaus.obj B.presentation),
    fun _ => (presentation.π B), ?_ , ?_⟩
open CompHaus in
lemma generate_singleton_mem_coherentTopology (B : CompHaus) :
    Sieve.generate (Presieve.singleton (presentation.π B)) ∈ coherentTopology CompHaus B := by
  apply Coverage.saturate.of
  refine ⟨Unit, inferInstance, fun _ => (Stonean.toCompHaus.obj B.presentation),
    fun _ => (presentation.π B), ?_ , ?_⟩
  · 

Proof state:
case hS.refine_1
B : CompHaus
⊢ Presieve.singleton (presentation.π B) =
    Presieve.ofArrows (fun x => Stonean.toCompHaus.obj (presentation B)) fun x => presentation.π B

Next tactic:
funext X f
open CompHaus in
lemma generate_singleton_mem_coherentTopology (B : CompHaus) :
    Sieve.generate (Presieve.singleton (presentation.π B)) ∈ coherentTopology CompHaus B := by
  apply Coverage.saturate.of
  refine ⟨Unit, inferInstance, fun _ => (Stonean.toCompHaus.obj B.presentation),
    fun _ => (presentation.π B), ?_ , ?_⟩
  · funext X f
    

Proof state:
case hS.refine_1.h.h
B X : CompHaus
f : X ⟶ B
⊢ Presieve.singleton (presentation.π B) f =
    Presieve.ofArrows (fun x => Stonean.toCompHaus.obj (presentation B)) (fun x => presentation.π B) f

Next tactic:
ext
open CompHaus in
lemma generate_singleton_mem_coherentTopology (B : CompHaus) :
    Sieve.generate (Presieve.singleton (presentation.π B)) ∈ coherentTopology CompHaus B := by
  apply Coverage.saturate.of
  refine ⟨Unit, inferInstance, fun _ => (Stonean.toCompHaus.obj B.presentation),
    fun _ => (presentation.π B), ?_ , ?_⟩
  · funext X f
    ext
    

Proof state:
case hS.refine_1.h.h.a
B X : CompHaus
f : X ⟶ B
⊢ Presieve.singleton (presentation.π B) f ↔
    Presieve.ofArrows (fun x => Stonean.toCompHaus.obj (presentation B)) (fun x => presentation.π B) f

Next tactic:
refine ⟨fun ⟨⟩ ↦ ⟨()⟩, ?_⟩
open CompHaus in
lemma generate_singleton_mem_coherentTopology (B : CompHaus) :
    Sieve.generate (Presieve.singleton (presentation.π B)) ∈ coherentTopology CompHaus B := by
  apply Coverage.saturate.of
  refine ⟨Unit, inferInstance, fun _ => (Stonean.toCompHaus.obj B.presentation),
    fun _ => (presentation.π B), ?_ , ?_⟩
  · funext X f
    ext
    refine ⟨fun ⟨⟩ ↦ ⟨()⟩, ?_⟩
    

Proof state:
case hS.refine_1.h.h.a
B X : CompHaus
f : X ⟶ B
⊢ Presieve.ofArrows (fun x => Stonean.toCompHaus.obj (presentation B)) (fun x => presentation.π B) f →
    Presieve.singleton (presentation.π B) f

Next tactic:
rintro ⟨⟩
open CompHaus in
lemma generate_singleton_mem_coherentTopology (B : CompHaus) :
    Sieve.generate (Presieve.singleton (presentation.π B)) ∈ coherentTopology CompHaus B := by
  apply Coverage.saturate.of
  refine ⟨Unit, inferInstance, fun _ => (Stonean.toCompHaus.obj B.presentation),
    fun _ => (presentation.π B), ?_ , ?_⟩
  · funext X f
    ext
    refine ⟨fun ⟨⟩ ↦ ⟨()⟩, ?_⟩
    rintro ⟨⟩
    

Proof state:
case hS.refine_1.h.h.a.mk
B Y : CompHaus
i✝ : Unit
⊢ Presieve.singleton (presentation.π B) (presentation.π B)

Next tactic:
simp only [Presieve.singleton_eq_iff_domain]
open CompHaus in
lemma generate_singleton_mem_coherentTopology (B : CompHaus) :
    Sieve.generate (Presieve.singleton (presentation.π B)) ∈ coherentTopology CompHaus B := by
  apply Coverage.saturate.of
  refine ⟨Unit, inferInstance, fun _ => (Stonean.toCompHaus.obj B.presentation),
    fun _ => (presentation.π B), ?_ , ?_⟩
  · funext X f
    ext
    refine ⟨fun ⟨⟩ ↦ ⟨()⟩, ?_⟩
    rintro ⟨⟩
    simp only [Presieve.singleton_eq_iff_domain]
  · 

Proof state:
case hS.refine_2
B : CompHaus
⊢ EffectiveEpiFamily (fun x => Stonean.toCompHaus.obj (presentation B)) fun x => presentation.π B

Next tactic:
apply ((effectiveEpiFamily_tfae
      (fun (_ : Unit) => (Stonean.toCompHaus.obj B.presentation))
      (fun (_ : Unit) => (CompHaus.presentation.π B))).out 0 2).mpr
open CompHaus in
lemma generate_singleton_mem_coherentTopology (B : CompHaus) :
    Sieve.generate (Presieve.singleton (presentation.π B)) ∈ coherentTopology CompHaus B := by
  apply Coverage.saturate.of
  refine ⟨Unit, inferInstance, fun _ => (Stonean.toCompHaus.obj B.presentation),
    fun _ => (presentation.π B), ?_ , ?_⟩
  · funext X f
    ext
    refine ⟨fun ⟨⟩ ↦ ⟨()⟩, ?_⟩
    rintro ⟨⟩
    simp only [Presieve.singleton_eq_iff_domain]
  · apply ((effectiveEpiFamily_tfae
      (fun (_ : Unit) => (Stonean.toCompHaus.obj B.presentation))
      (fun (_ : Unit) => (CompHaus.presentation.π B))).out 0 2).mpr
    

Proof state:
case hS.refine_2
B : CompHaus
⊢ ∀ (b : ↑B.toTop), ∃ a x, (presentation.π B) x = b

Next tactic:
intro b
open CompHaus in
lemma generate_singleton_mem_coherentTopology (B : CompHaus) :
    Sieve.generate (Presieve.singleton (presentation.π B)) ∈ coherentTopology CompHaus B := by
  apply Coverage.saturate.of
  refine ⟨Unit, inferInstance, fun _ => (Stonean.toCompHaus.obj B.presentation),
    fun _ => (presentation.π B), ?_ , ?_⟩
  · funext X f
    ext
    refine ⟨fun ⟨⟩ ↦ ⟨()⟩, ?_⟩
    rintro ⟨⟩
    simp only [Presieve.singleton_eq_iff_domain]
  · apply ((effectiveEpiFamily_tfae
      (fun (_ : Unit) => (Stonean.toCompHaus.obj B.presentation))
      (fun (_ : Unit) => (CompHaus.presentation.π B))).out 0 2).mpr
    intro b
    

Proof state:
case hS.refine_2
B : CompHaus
b : ↑B.toTop
⊢ ∃ a x, (presentation.π B) x = b

Next tactic:
exact ⟨(), (CompHaus.epi_iff_surjective (presentation.π B)).mp (presentation.epi_π B) b⟩