Theorem: CategoryTheory.Subgroupoid.IsNormal.generatedNormal_le
File: Mathlib/CategoryTheory/Groupoid/Subgroupoid.lean

tactic: constructor
state_before: C : Type u
inst✝ : Groupoid C
S✝ : Subgroupoid C
X : (c d : C) → Set (c ⟶ d)
S : Subgroupoid C
Sn : S.IsNormal
⊢ generatedNormal X ≤ S ↔ ∀ (c d : C), X c d ⊆ S.arrows c d
state_after: case mp
C : Type u
inst✝ : Groupoid C
S✝ : Subgroupoid C
X : (c d : C) → Set (c ⟶ d)
S : Subgroupoid C
Sn : S.IsNormal
⊢ generatedNormal X ≤ S → ∀ (c d : C), X c d ⊆ S.arrows c d

case mpr
C : Type u
inst✝ : Groupoid C
S✝ : Subgroupoid C
X : (c d : C) → Set (c ⟶ d)
S : Subgroupoid C
Sn : S.IsNormal
⊢ (∀ (c d : C), X c d ⊆ S.arrows c d) → generatedNormal X ≤ S

tactic: rintro h c d
state_before: case mp
C : Type u
inst✝ : Groupoid C
S✝ : Subgroupoid C
X : (c d : C) → Set (c ⟶ d)
S : Subgroupoid C
Sn : S.IsNormal
⊢ generatedNormal X ≤ S → ∀ (c d : C), X c d ⊆ S.arrows c d
state_after: case mp
C : Type u
inst✝ : Groupoid C
S✝ : Subgroupoid C
X : (c d : C) → Set (c ⟶ d)
S : Subgroupoid C
Sn : S.IsNormal
h : generatedNormal X ≤ S
c d : C
⊢ X c d ⊆ S.arrows c d

tactic: have h' := generated_le_generatedNormal X
state_before: case mp
C : Type u
inst✝ : Groupoid C
S✝ : Subgroupoid C
X : (c d : C) → Set (c ⟶ d)
S : Subgroupoid C
Sn : S.IsNormal
h : generatedNormal X ≤ S
c d : C
⊢ X c d ⊆ S.arrows c d
state_after: case mp
C : Type u
inst✝ : Groupoid C
S✝ : Subgroupoid C
X : (c d : C) → Set (c ⟶ d)
S : Subgroupoid C
Sn : S.IsNormal
h : generatedNormal X ≤ S
c d : C
h' : generated X ≤ generatedNormal X
⊢ X c d ⊆ S.arrows c d

tactic: rw [le_iff] at h h'
state_before: case mp
C : Type u
inst✝ : Groupoid C
S✝ : Subgroupoid C
X : (c d : C) → Set (c ⟶ d)
S : Subgroupoid C
Sn : S.IsNormal
h : generatedNormal X ≤ S
c d : C
h' : generated X ≤ generatedNormal X
⊢ X c d ⊆ S.arrows c d
state_after: case mp
C : Type u
inst✝ : Groupoid C
S✝ : Subgroupoid C
X : (c d : C) → Set (c ⟶ d)
S : Subgroupoid C
Sn : S.IsNormal
h : ∀ {c d : C}, (generatedNormal X).arrows c d ⊆ S.arrows c d
c d : C
h' : ∀ {c d : C}, (generated X).arrows c d ⊆ (generatedNormal X).arrows c d
⊢ X c d ⊆ S.arrows c d

tactic: exact ((subset_generated X c d).trans (@h' c d)).trans (@h c d)
state_before: case mp
C : Type u
inst✝ : Groupoid C
S✝ : Subgroupoid C
X : (c d : C) → Set (c ⟶ d)
S : Subgroupoid C
Sn : S.IsNormal
h : ∀ {c d : C}, (generatedNormal X).arrows c d ⊆ S.arrows c d
c d : C
h' : ∀ {c d : C}, (generated X).arrows c d ⊆ (generatedNormal X).arrows c d
⊢ X c d ⊆ S.arrows c d
state_after: no goals

tactic: rintro h
state_before: case mpr
C : Type u
inst✝ : Groupoid C
S✝ : Subgroupoid C
X : (c d : C) → Set (c ⟶ d)
S : Subgroupoid C
Sn : S.IsNormal
⊢ (∀ (c d : C), X c d ⊆ S.arrows c d) → generatedNormal X ≤ S
state_after: case mpr
C : Type u
inst✝ : Groupoid C
S✝ : Subgroupoid C
X : (c d : C) → Set (c ⟶ d)
S : Subgroupoid C
Sn : S.IsNormal
h : ∀ (c d : C), X c d ⊆ S.arrows c d
⊢ generatedNormal X ≤ S

tactic: apply @sInf_le (Subgroupoid C) _
state_before: case mpr
C : Type u
inst✝ : Groupoid C
S✝ : Subgroupoid C
X : (c d : C) → Set (c ⟶ d)
S : Subgroupoid C
Sn : S.IsNormal
h : ∀ (c d : C), X c d ⊆ S.arrows c d
⊢ generatedNormal X ≤ S
state_after: case mpr.a
C : Type u
inst✝ : Groupoid C
S✝ : Subgroupoid C
X : (c d : C) → Set (c ⟶ d)
S : Subgroupoid C
Sn : S.IsNormal
h : ∀ (c d : C), X c d ⊆ S.arrows c d
⊢ S ∈ {S | (∀ (c d : C), X c d ⊆ S.arrows c d) ∧ S.IsNormal}

tactic: exact ⟨h, Sn⟩
state_before: case mpr.a
C : Type u
inst✝ : Groupoid C
S✝ : Subgroupoid C
X : (c d : C) → Set (c ⟶ d)
S : Subgroupoid C
Sn : S.IsNormal
h : ∀ (c d : C), X c d ⊆ S.arrows c d
⊢ S ∈ {S | (∀ (c d : C), X c d ⊆ S.arrows c d) ∧ S.IsNormal}
state_after: no goals