Theorem: CategoryTheory.FintypeCat.Action.pretransitive_of_isConnected
File: Mathlib/CategoryTheory/Galois/Examples.lean

Proof steps:
state_before: G : Type u
inst✝¹ : Group G
X : Action FintypeCat (MonCat.of G)
inst✝ : IsConnected X
x y : ↑X.V
⊢ ∃ g, g • x = y
state_after: G : Type u
inst✝¹ : Group G
X : Action FintypeCat (MonCat.of G)
inst✝ : IsConnected X
x y : ↑X.V
T : Set ↑X.V := MulAction.orbit G x
⊢ ∃ g, g • x = y
tactic: let T : Set X.V := MulAction.orbit G x
state_before: G : Type u
inst✝¹ : Group G
X : Action FintypeCat (MonCat.of G)
inst✝ : IsConnected X
x y : ↑X.V
T : Set ↑X.V := MulAction.orbit G x
⊢ ∃ g, g • x = y
state_after: G : Type u
inst✝¹ : Group G
X : Action FintypeCat (MonCat.of G)
inst✝ : IsConnected X
x y : ↑X.V
T : Set ↑X.V := MulAction.orbit G x
this : Fintype ↑T
⊢ ∃ g, g • x = y
tactic: have : Fintype T := Fintype.ofFinite T
state_before: G : Type u
inst✝¹ : Group G
X : Action FintypeCat (MonCat.of G)
inst✝ : IsConnected X
x y : ↑X.V
T : Set ↑X.V := MulAction.orbit G x
this : Fintype ↑T
⊢ ∃ g, g • x = y
state_after: G : Type u
inst✝¹ : Group G
X : Action FintypeCat (MonCat.of G)
inst✝ : IsConnected X
x y : ↑X.V
T : Set ↑X.V := MulAction.orbit G x
this✝ : Fintype ↑T
this : MulAction G ↑(FintypeCat.of ↑T) := inferInstanceAs (MulAction G ↑(MulAction.orbit G x))
⊢ ∃ g, g • x = y
tactic: letI : MulAction G (FintypeCat.of T) := inferInstanceAs <| MulAction G ↑(MulAction.orbit G x)
state_before: G : Type u
inst✝¹ : Group G
X : Action FintypeCat (MonCat.of G)
inst✝ : IsConnected X
x y : ↑X.V
T : Set ↑X.V := MulAction.orbit G x
this✝ : Fintype ↑T
this : MulAction G ↑(FintypeCat.of ↑T) := inferInstanceAs (MulAction G ↑(MulAction.orbit G x))
⊢ ∃ g, g • x = y
state_after: G : Type u
inst✝¹ : Group G
X : Action FintypeCat (MonCat.of G)
inst✝ : IsConnected X
x y : ↑X.V
T : Set ↑X.V := MulAction.orbit G x
this✝ : Fintype ↑T
this : MulAction G ↑(FintypeCat.of ↑T) := inferInstanceAs (MulAction G ↑(MulAction.orbit G x))
T' : Action FintypeCat (MonCat.of G) := Action.FintypeCat.ofMulAction G (FintypeCat.of ↑T)
⊢ ∃ g, g • x = y
tactic: let T' : Action FintypeCat (MonCat.of G) := Action.FintypeCat.ofMulAction G (FintypeCat.of T)
state_before: G : Type u
inst✝¹ : Group G
X : Action FintypeCat (MonCat.of G)
inst✝ : IsConnected X
x y : ↑X.V
T : Set ↑X.V := MulAction.orbit G x
this✝ : Fintype ↑T
this : MulAction G ↑(FintypeCat.of ↑T) := inferInstanceAs (MulAction G ↑(MulAction.orbit G x))
T' : Action FintypeCat (MonCat.of G) := Action.FintypeCat.ofMulAction G (FintypeCat.of ↑T)
⊢ ∃ g, g • x = y
state_after: G : Type u
inst✝¹ : Group G
X : Action FintypeCat (MonCat.of G)
inst✝ : IsConnected X
x y : ↑X.V
T : Set ↑X.V := MulAction.orbit G x
this✝ : Fintype ↑T
this : MulAction G ↑(FintypeCat.of ↑T) := inferInstanceAs (MulAction G ↑(MulAction.orbit G x))
T' : Action FintypeCat (MonCat.of G) := Action.FintypeCat.ofMulAction G (FintypeCat.of ↑T)
i : T' ⟶ X := { hom := Subtype.val, comm := ⋯ }
⊢ ∃ g, g • x = y
tactic: let i : T' ⟶ X := ⟨Subtype.val, fun _ ↦ rfl⟩
state_before: G : Type u
inst✝¹ : Group G
X : Action FintypeCat (MonCat.of G)
inst✝ : IsConnected X
x y : ↑X.V
T : Set ↑X.V := MulAction.orbit G x
this✝ : Fintype ↑T
this : MulAction G ↑(FintypeCat.of ↑T) := inferInstanceAs (MulAction G ↑(MulAction.orbit G x))
T' : Action FintypeCat (MonCat.of G) := Action.FintypeCat.ofMulAction G (FintypeCat.of ↑T)
i : T' ⟶ X := { hom := Subtype.val, comm := ⋯ }
⊢ ∃ g, g • x = y
state_after: G : Type u
inst✝¹ : Group G
X : Action FintypeCat (MonCat.of G)
inst✝ : IsConnected X
x y : ↑X.V
T : Set ↑X.V := MulAction.orbit G x
this✝¹ : Fintype ↑T
this✝ : MulAction G ↑(FintypeCat.of ↑T) := inferInstanceAs (MulAction G ↑(MulAction.orbit G x))
T' : Action FintypeCat (MonCat.of G) := Action.FintypeCat.ofMulAction G (FintypeCat.of ↑T)
i : T' ⟶ X := { hom := Subtype.val, comm := ⋯ }
this : Mono i
⊢ ∃ g, g • x = y
tactic: have : Mono i := ConcreteCategory.mono_of_injective _ (Subtype.val_injective)
state_before: G : Type u
inst✝¹ : Group G
X : Action FintypeCat (MonCat.of G)
inst✝ : IsConnected X
x y : ↑X.V
T : Set ↑X.V := MulAction.orbit G x
this✝¹ : Fintype ↑T
this✝ : MulAction G ↑(FintypeCat.of ↑T) := inferInstanceAs (MulAction G ↑(MulAction.orbit G x))
T' : Action FintypeCat (MonCat.of G) := Action.FintypeCat.ofMulAction G (FintypeCat.of ↑T)
i : T' ⟶ X := { hom := Subtype.val, comm := ⋯ }
this : Mono i
⊢ ∃ g, g • x = y
state_after: G : Type u
inst✝¹ : Group G
X : Action FintypeCat (MonCat.of G)
inst✝ : IsConnected X
x y : ↑X.V
T : Set ↑X.V := MulAction.orbit G x
this✝² : Fintype ↑T
this✝¹ : MulAction G ↑(FintypeCat.of ↑T) := inferInstanceAs (MulAction G ↑(MulAction.orbit G x))
T' : Action FintypeCat (MonCat.of G) := Action.FintypeCat.ofMulAction G (FintypeCat.of ↑T)
i : T' ⟶ X := { hom := Subtype.val, comm := ⋯ }
this✝ : Mono i
this : IsIso i
⊢ ∃ g, g • x = y
tactic: have : IsIso i := by
      apply IsConnected.noTrivialComponent T' i
      apply (not_initial_iff_fiber_nonempty (Action.forget _ _) T').mpr
      exact Set.Nonempty.coe_sort (MulAction.orbit_nonempty x)
state_before: G : Type u
inst✝¹ : Group G
X : Action FintypeCat (MonCat.of G)
inst✝ : IsConnected X
x y : ↑X.V
T : Set ↑X.V := MulAction.orbit G x
this✝² : Fintype ↑T
this✝¹ : MulAction G ↑(FintypeCat.of ↑T) := inferInstanceAs (MulAction G ↑(MulAction.orbit G x))
T' : Action FintypeCat (MonCat.of G) := Action.FintypeCat.ofMulAction G (FintypeCat.of ↑T)
i : T' ⟶ X := { hom := Subtype.val, comm := ⋯ }
this✝ : Mono i
this : IsIso i
⊢ ∃ g, g • x = y
state_after: G : Type u
inst✝¹ : Group G
X : Action FintypeCat (MonCat.of G)
inst✝ : IsConnected X
x y : ↑X.V
T : Set ↑X.V := MulAction.orbit G x
this✝² : Fintype ↑T
this✝¹ : MulAction G ↑(FintypeCat.of ↑T) := inferInstanceAs (MulAction G ↑(MulAction.orbit G x))
T' : Action FintypeCat (MonCat.of G) := Action.FintypeCat.ofMulAction G (FintypeCat.of ↑T)
i : T' ⟶ X := { hom := Subtype.val, comm := ⋯ }
this✝ : Mono i
this : IsIso i
hb : Function.Bijective i.hom
⊢ ∃ g, g • x = y
tactic: have hb : Function.Bijective i.hom := by
      apply (ConcreteCategory.isIso_iff_bijective i.hom).mp
      exact map_isIso (forget₂ _ FintypeCat) i
state_before: G : Type u
inst✝¹ : Group G
X : Action FintypeCat (MonCat.of G)
inst✝ : IsConnected X
x y : ↑X.V
T : Set ↑X.V := MulAction.orbit G x
this✝² : Fintype ↑T
this✝¹ : MulAction G ↑(FintypeCat.of ↑T) := inferInstanceAs (MulAction G ↑(MulAction.orbit G x))
T' : Action FintypeCat (MonCat.of G) := Action.FintypeCat.ofMulAction G (FintypeCat.of ↑T)
i : T' ⟶ X := { hom := Subtype.val, comm := ⋯ }
this✝ : Mono i
this : IsIso i
hb : Function.Bijective i.hom
⊢ ∃ g, g • x = y
state_after: case intro.mk.intro
G : Type u
inst✝¹ : Group G
X : Action FintypeCat (MonCat.of G)
inst✝ : IsConnected X
x y : ↑X.V
T : Set ↑X.V := MulAction.orbit G x
this✝² : Fintype ↑T
this✝¹ : MulAction G ↑(FintypeCat.of ↑T) := inferInstanceAs (MulAction G ↑(MulAction.orbit G x))
T' : Action FintypeCat (MonCat.of G) := Action.FintypeCat.ofMulAction G (FintypeCat.of ↑T)
i : T' ⟶ X := { hom := Subtype.val, comm := ⋯ }
this✝ : Mono i
this : IsIso i
hb : Function.Bijective i.hom
y' : ↑X.V
g : G
hg : g • x = y'
hy' : y' = y
⊢ ∃ g, g • x = y
tactic: obtain ⟨⟨y', ⟨g, (hg : g • x = y')⟩⟩, (hy' : y' = y)⟩ := hb.surjective y
state_before: case intro.mk.intro
G : Type u
inst✝¹ : Group G
X : Action FintypeCat (MonCat.of G)
inst✝ : IsConnected X
x y : ↑X.V
T : Set ↑X.V := MulAction.orbit G x
this✝² : Fintype ↑T
this✝¹ : MulAction G ↑(FintypeCat.of ↑T) := inferInstanceAs (MulAction G ↑(MulAction.orbit G x))
T' : Action FintypeCat (MonCat.of G) := Action.FintypeCat.ofMulAction G (FintypeCat.of ↑T)
i : T' ⟶ X := { hom := Subtype.val, comm := ⋯ }
this✝ : Mono i
this : IsIso i
hb : Function.Bijective i.hom
y' : ↑X.V
g : G
hg : g • x = y'
hy' : y' = y
⊢ ∃ g, g • x = y
state_after: case h
G : Type u
inst✝¹ : Group G
X : Action FintypeCat (MonCat.of G)
inst✝ : IsConnected X
x y : ↑X.V
T : Set ↑X.V := MulAction.orbit G x
this✝² : Fintype ↑T
this✝¹ : MulAction G ↑(FintypeCat.of ↑T) := inferInstanceAs (MulAction G ↑(MulAction.orbit G x))
T' : Action FintypeCat (MonCat.of G) := Action.FintypeCat.ofMulAction G (FintypeCat.of ↑T)
i : T' ⟶ X := { hom := Subtype.val, comm := ⋯ }
this✝ : Mono i
this : IsIso i
hb : Function.Bijective i.hom
y' : ↑X.V
g : G
hg : g • x = y'
hy' : y' = y
⊢ g • x = y
tactic: use g
state_before: case h
G : Type u
inst✝¹ : Group G
X : Action FintypeCat (MonCat.of G)
inst✝ : IsConnected X
x y : ↑X.V
T : Set ↑X.V := MulAction.orbit G x
this✝² : Fintype ↑T
this✝¹ : MulAction G ↑(FintypeCat.of ↑T) := inferInstanceAs (MulAction G ↑(MulAction.orbit G x))
T' : Action FintypeCat (MonCat.of G) := Action.FintypeCat.ofMulAction G (FintypeCat.of ↑T)
i : T' ⟶ X := { hom := Subtype.val, comm := ⋯ }
this✝ : Mono i
this : IsIso i
hb : Function.Bijective i.hom
y' : ↑X.V
g : G
hg : g • x = y'
hy' : y' = y
⊢ g • x = y
state_after: no goals
tactic: exact hg.trans hy'