Built with Alectryon, running Lean4 v4.17.0. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use instead of Ctrl.
/-
 - Created in 2024 by Gaëtan Serré
 -/

import Mathlib.Algebra.Group.Subgroup.Defs
import CayleyGraph.FinGroup

set_option maxHeartbeats 600000

structure Graph (G : Type*) where
  Adj : Set (G × G)
  Connected : Prop
  Acyclic : Prop

namespace Graph
def is_tree {α : Type*} (G : Graph α) := G.Connected  G.Acyclic
end Graph

def CayleyGraph {G : Type*} [Fintype G] [FinGroup G] (X : Set G) : Graph G :=
  {
    Adj := {(g1, g2) |  g  X, g1 * g = g2  g1 * g⁻¹ = g2}
    Connected :=  g1 g2, g1  g2   (F : Formula G X), 0 < F.length  g1 * F.val = g2
    /-
    For any node `g`, there is no path ((g, g1), ..., (gn, g)) from `g` to `g`. Paths are represented by irreducible Formulas of size >= 1. We use the irreducible property to avoid looking at such Formula: `∀ g' ∈ CG.X, g * [g', g'⁻¹].prod = g`. This kind of Formula gives a trivial path that leads `g` to itself, for any subset `X`. This does not represented a cycle, as reducible Formulas contain steps that cancel each other out in pairs.
    -/
    Acyclic :=  g,  (F : Formula G X), 0 < F.length  F.irreducible  g * F.val  g
  }

variable {G : Type*} [Fintype G] [FinGroup G] (X : Set G)
variable (G' : Subgroup G)

/--
We show that, given an irreducible Formula (a path) of size `> 1`, then two consecutive steps never cancel each other out, i.e., given any node `g`, we never go back to `g` directly after moving from it.
-/
example (F : Formula G X) (F_len : 1 < F.length) (F_irr : F.irreducible) :  (g : G),  (i : Fin F.length), g * F.get i * F.get (i + {val:=1, isLt:=F_len})  g := 

Goals accomplished! 🐙
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
F: Formula G X
F_len: 1 < F.length
F_irr: F.irreducible

(g : G) (i : Fin F.length), g * F.get i * F.get (i +1, F_len⟩) g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
F: Formula G X
F_len: 1 < F.length
F_irr: F.irreducible
g: G
i: Fin F.length

g * F.get i * F.get (i +1, F_len⟩) g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
F: Formula G X
F_len: 1 < F.length
F_irr: F.irreducible

(g : G) (i : Fin F.length), g * F.get i * F.get (i +1, F_len⟩) g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
F: Formula G X
F_len: 1 < F.length
F_irr: if h : 1 < F.length then (i : Fin F.length), F.get i * F.get (i +1, h⟩) 1 else if h : F.length = 1 then F.get ⟨0, 1 else F.elems = []
g: G
i: Fin F.length

g * F.get i * F.get (i +1, F_len⟩) g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
F: Formula G X
F_len: 1 < F.length
F_irr: F.irreducible

(g : G) (i : Fin F.length), g * F.get i * F.get (i +1, F_len⟩) g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
F: Formula G X
F_len: 1 < F.length
g: G
i: Fin F.length
h✝: 1 < F.length
F_irr: (i : Fin F.length), F.get i * F.get (i +1, h⟩) 1

isTrue
g * F.get i * F.get (i +1, F_len⟩) g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
F: Formula G X
F_len: 1 < F.length
g: G
i: Fin F.length
h✝: ¬1 < F.length
F_irr: (i : Fin F.length), F.get i * F.get (i +1, F_len⟩) 1
g * F.get i * F.get (i +1, F_len⟩) g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
F: Formula G X
F_len: 1 < F.length
F_irr: F.irreducible

(g : G) (i : Fin F.length), g * F.get i * F.get (i +1, F_len⟩) g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
F: Formula G X
F_len: 1 < F.length
g: G
i: Fin F.length
h✝: 1 < F.length
F_irr: (i : Fin F.length), F.get i * F.get (i +1, h⟩) 1

isTrue
g * F.get i * F.get (i +1, F_len⟩) g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
F: Formula G X
F_len: 1 < F.length
g: G
i: Fin F.length
h✝: 1 < F.length
F_irr: (i : Fin F.length), F.get i * F.get (i +1, h⟩) 1

isTrue
g * F.get i * F.get (i +1, F_len⟩) g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
F: Formula G X
F_len: 1 < F.length
g: G
i: Fin F.length
h✝: ¬1 < F.length
F_irr: (i : Fin F.length), F.get i * F.get (i +1, F_len⟩) 1
g * F.get i * F.get (i +1, F_len⟩) g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
F: Formula G X
F_len: 1 < F.length
g: G
i: Fin F.length
h✝: 1 < F.length
F_irr: F.get i * F.get (i +1, h⟩) 1

isTrue
g * F.get i * F.get (i +1, F_len⟩) g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
F: Formula G X
F_len: 1 < F.length
g: G
i: Fin F.length
h✝: 1 < F.length
F_irr: (i : Fin F.length), F.get i * F.get (i +1, h⟩) 1

isTrue
g * F.get i * F.get (i +1, F_len⟩) g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
F: Formula G X
F_len: 1 < F.length
g: G
i: Fin F.length
h✝: 1 < F.length
F_irr: F.get i * F.get (i +1, h⟩) 1
h_contra: g * F.get i * F.get (i +1, F_len⟩) = g

isTrue
False
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
F: Formula G X
F_len: 1 < F.length
g: G
i: Fin F.length
h✝: 1 < F.length
F_irr: (i : Fin F.length), F.get i * F.get (i +1, h⟩) 1

isTrue
g * F.get i * F.get (i +1, F_len⟩) g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
F: Formula G X
F_len: 1 < F.length
g: G
i: Fin F.length
h✝: 1 < F.length
F_irr: F.get i * F.get (i +1, h⟩) 1
h_contra: g * F.get i * F.get (i +1, F_len⟩) = g

isTrue
False
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
F: Formula G X
F_len: 1 < F.length
g: G
i: Fin F.length
h✝: 1 < F.length
F_irr: F.get i * F.get (i +1, h⟩) 1
h_contra: g * F.get i * F.get (i +1, F_len⟩) = g

isTrue
False

Goals accomplished! 🐙
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
F: Formula G X
F_len: 1 < F.length
g: G
i: Fin F.length
h✝: 1 < F.length
F_irr: F.get i * F.get (i +1, h⟩) 1
h_contra: g * (F.get i * F.get (i +1, F_len⟩)) = g

isTrue
False
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
F: Formula G X
F_len: 1 < F.length
g: G
i: Fin F.length
h✝: 1 < F.length
F_irr: F.get i * F.get (i +1, h⟩) 1
h_contra: g * (F.get i * F.get (i +1, F_len⟩)) = g

isTrue
False
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
F: Formula G X
F_len: 1 < F.length
g: G
i: Fin F.length
h✝: 1 < F.length
F_irr: (i : Fin F.length), F.get i * F.get (i +1, h⟩) 1

isTrue
g * F.get i * F.get (i +1, F_len⟩) g

Goals accomplished! 🐙
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
F: Formula G X
F_len: 1 < F.length
F_irr: F.irreducible

(g : G) (i : Fin F.length), g * F.get i * F.get (i +1, F_len⟩) g

Goals accomplished! 🐙
/-- The action of a Subgroup `G'` of `G` on the Cayley graph formed by `G` and `X` -/ def group_action {G : Type*} [Fintype G] [FinGroup G] {G' : Subgroup G} (X : Set G) (g' : G') : Graph G := { Adj := {(g1, g2) | g X, g1 * g' * g = g2 * g' g1 * g' * g⁻¹ = g2 * g'} Connected := g1 g2, g1 g2 (F : Formula G X), 0 < F.length g1 * g' * F.val = g2 * g' Acyclic := g, (F : Formula G X), 0 < F.length F.irreducible g * g' * F.val g * g' } def CG := CayleyGraph X /- We show that our definition of graph action is consistent, that is, CG (G, X) is connected (acyclic) iff any resulting CG graph from our definition is connected (acyclic). -/ example (g' : G') : (CG X).Connected (group_action X g').Connected :=

Goals accomplished! 🐙
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'

(CG X).Connected (group_action X g').Connected
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'

mp
(CG X).Connected (group_action X g').Connected
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
(group_action X g').Connected (CG X).Connected
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'

(CG X).Connected (group_action X g').Connected
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'

mp
(CG X).Connected (group_action X g').Connected
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'

mp
(CG X).Connected (group_action X g').Connected
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
(group_action X g').Connected (CG X).Connected
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
CG_connected: (CG X).Connected

mp
(group_action X g').Connected
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'

mp
(CG X).Connected (group_action X g').Connected
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
CG_connected: (CG X).Connected
g1, g2: G
g1_neq_g2: g1 g2

mp
F, 0 < F.length g1 * g' * F.val = g2 * g'
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'

mp
(CG X).Connected (group_action X g').Connected
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
CG_connected: (CG X).Connected
g1, g2: G
g1_neq_g2: g1 g2

mp
F, 0 < F.length g1 * g' * F.val = g2 * g'

Goals accomplished! 🐙
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
CG_connected: (CG X).Connected
g1, g2: G
g1_neq_g2: g1 g2

mp
F, 0 < F.length g1 * g' * F.val = g2 * g'

Goals accomplished! 🐙
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'

mp
(CG X).Connected (group_action X g').Connected

Goals accomplished! 🐙
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'

(CG X).Connected (group_action X g').Connected
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g'CG_connected: (group_action X g').Connected

mpr
(CG X).Connected
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'

(CG X).Connected (group_action X g').Connected
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g'CG_connected: (group_action X g').Connected
g1, g2: G
g1_neq_g2: g1 g2

mpr
F, 0 < F.length g1 * F.val = g2
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'

(CG X).Connected (group_action X g').Connected
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g'CG_connected: (group_action X g').Connected
g1, g2: G
g1_neq_g2: g1 g2

mpr
F, 0 < F.length g1 * F.val = g2

Goals accomplished! 🐙
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g'CG_connected: (group_action X g').Connected
g1, g2: G
g1_neq_g2: g1 g2

mpr
F, 0 < F.length g1 * F.val = g2

Goals accomplished! 🐙
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'

(CG X).Connected (group_action X g').Connected
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g'CG_connected: (group_action X g').Connected
g1, g2: G
g1_neq_g2: g1 g2
g1_neq_g2_prod: g1 * g'⁻¹ g2 * g'⁻¹
F: Formula G X
F_len: 0 < F.length
F_val: g1 * g'⁻¹ * g' * F.val = g2 * g'⁻¹ * g'

mpr.intro.intro
F, 0 < F.length g1 * F.val = g2
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'

(CG X).Connected (group_action X g').Connected
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g'CG_connected: (group_action X g').Connected
g1, g2: G
g1_neq_g2: g1 g2
g1_neq_g2_prod: g1 * g'⁻¹ g2 * g'⁻¹
F: Formula G X
F_len: 0 < F.length
F_val: g1 * g'⁻¹ * g' * F.val = g2 * g'⁻¹ * g'

mpr.intro.intro
F, 0 < F.length g1 * F.val = g2
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g'CG_connected: (group_action X g').Connected
g1, g2: G
g1_neq_g2: g1 g2
g1_neq_g2_prod: g1 * g'⁻¹ g2 * g'⁻¹
F: Formula G X
F_len: 0 < F.length
F_val: g1 * (g'⁻¹ * g') * F.val = g2 * g'⁻¹ * g'

mpr.intro.intro
F, 0 < F.length g1 * F.val = g2
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g'CG_connected: (group_action X g').Connected
g1, g2: G
g1_neq_g2: g1 g2
g1_neq_g2_prod: g1 * g'⁻¹ g2 * g'⁻¹
F: Formula G X
F_len: 0 < F.length
F_val: g1 * g'⁻¹ * g' * F.val = g2 * g'⁻¹ * g'

mpr.intro.intro
F, 0 < F.length g1 * F.val = g2
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g'CG_connected: (group_action X g').Connected
g1, g2: G
g1_neq_g2: g1 g2
g1_neq_g2_prod: g1 * g'⁻¹ g2 * g'⁻¹
F: Formula G X
F_len: 0 < F.length
F_val: g1 * (g'⁻¹ * g') * F.val = g2 * (g'⁻¹ * g')

mpr.intro.intro
F, 0 < F.length g1 * F.val = g2
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g'CG_connected: (group_action X g').Connected
g1, g2: G
g1_neq_g2: g1 g2
g1_neq_g2_prod: g1 * g'⁻¹ g2 * g'⁻¹
F: Formula G X
F_len: 0 < F.length
F_val: g1 * (g'⁻¹ * g') * F.val = g2 * (g'⁻¹ * g')

mpr.intro.intro
F, 0 < F.length g1 * F.val = g2
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g'CG_connected: (group_action X g').Connected
g1, g2: G
g1_neq_g2: g1 g2
g1_neq_g2_prod: g1 * g'⁻¹ g2 * g'⁻¹
F: Formula G X
F_len: 0 < F.length
F_val: g1 * (g'⁻¹ * g') * F.val = g2 * (g'⁻¹ * g')

mpr.intro.intro
F, 0 < F.length g1 * F.val = g2
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'

(CG X).Connected (group_action X g').Connected
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g'CG_connected: (group_action X g').Connected
g1, g2: G
g1_neq_g2: g1 g2
g1_neq_g2_prod: g1 * g'⁻¹ g2 * g'⁻¹
F: Formula G X
F_len: 0 < F.length
F_val: g1 * (g'⁻¹ * g') * F.val = g2 * (g'⁻¹ * g')

mpr.intro.intro
F, 0 < F.length g1 * F.val = g2
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g'CG_connected: (group_action X g').Connected
g1, g2: G
g1_neq_g2: g1 g2
g1_neq_g2_prod: g1 * g'⁻¹ g2 * g'⁻¹
F: Formula G X
F_len: 0 < F.length
F_val: g1 * (g'⁻¹ * g') * F.val = g2 * (g'⁻¹ * g')

mpr.intro.intro
F, 0 < F.length g1 * F.val = g2
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g'CG_connected: (group_action X g').Connected
g1, g2: G
g1_neq_g2: g1 g2
g1_neq_g2_prod: g1 * g'⁻¹ g2 * g'⁻¹
F: Formula G X
F_len: 0 < F.length
F_val: g1 * (g'⁻¹ * g') * F.val = g2 * (g'⁻¹ * g')

mpr.intro.intro
F, 0 < F.length g1 * F.val = g2

Goals accomplished! 🐙
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g'CG_connected: (group_action X g').Connected
g1, g2: G
g1_neq_g2: g1 g2
g1_neq_g2_prod: g1 * g'⁻¹ g2 * g'⁻¹
F: Formula G X
F_len: 0 < F.length
F_val: g1 * 1 * F.val = g2 * 1

mpr.intro.intro
F, 0 < F.length g1 * F.val = g2
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g'CG_connected: (group_action X g').Connected
g1, g2: G
g1_neq_g2: g1 g2
g1_neq_g2_prod: g1 * g'⁻¹ g2 * g'⁻¹
F: Formula G X
F_len: 0 < F.length
F_val: g1 * 1 * F.val = g2 * 1

mpr.intro.intro
F, 0 < F.length g1 * F.val = g2
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'

(CG X).Connected (group_action X g').Connected
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g'CG_connected: (group_action X g').Connected
g1, g2: G
g1_neq_g2: g1 g2
g1_neq_g2_prod: g1 * g'⁻¹ g2 * g'⁻¹
F: Formula G X
F_len: 0 < F.length
F_val: g1 * 1 * F.val = g2 * 1

mpr.intro.intro
F, 0 < F.length g1 * F.val = g2
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g'CG_connected: (group_action X g').Connected
g1, g2: G
g1_neq_g2: g1 g2
g1_neq_g2_prod: g1 * g'⁻¹ g2 * g'⁻¹
F: Formula G X
F_len: 0 < F.length
F_val: g1 * F.val = g2 * 1

mpr.intro.intro
F, 0 < F.length g1 * F.val = g2
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g'CG_connected: (group_action X g').Connected
g1, g2: G
g1_neq_g2: g1 g2
g1_neq_g2_prod: g1 * g'⁻¹ g2 * g'⁻¹
F: Formula G X
F_len: 0 < F.length
F_val: g1 * 1 * F.val = g2 * 1

mpr.intro.intro
F, 0 < F.length g1 * F.val = g2
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g'CG_connected: (group_action X g').Connected
g1, g2: G
g1_neq_g2: g1 g2
g1_neq_g2_prod: g1 * g'⁻¹ g2 * g'⁻¹
F: Formula G X
F_len: 0 < F.length
F_val: g1 * F.val = g2

mpr.intro.intro
F, 0 < F.length g1 * F.val = g2
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g'CG_connected: (group_action X g').Connected
g1, g2: G
g1_neq_g2: g1 g2
g1_neq_g2_prod: g1 * g'⁻¹ g2 * g'⁻¹
F: Formula G X
F_len: 0 < F.length
F_val: g1 * F.val = g2

mpr.intro.intro
F, 0 < F.length g1 * F.val = g2
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g'CG_connected: (group_action X g').Connected
g1, g2: G
g1_neq_g2: g1 g2
g1_neq_g2_prod: g1 * g'⁻¹ g2 * g'⁻¹
F: Formula G X
F_len: 0 < F.length
F_val: g1 * F.val = g2

mpr.intro.intro
F, 0 < F.length g1 * F.val = g2
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'

(CG X).Connected (group_action X g').Connected

Goals accomplished! 🐙
example (g' : G') : (CG X).Acyclic (group_action X g').Acyclic := Iff.intro (λ CG_acyclic g F hF CG_acyclic (g * g') F hF) (

Goals accomplished! 🐙
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'

(group_action X g').Acyclic (CG X).Acyclic
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g'CG_acyclic: (group_action X g').Acyclic
g: G
F: Formula G X
F_len: 0 < F.length
F_irr: F.irreducible

g * F.val g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'

(group_action X g').Acyclic (CG X).Acyclic
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g: G
F: Formula G X
F_len: 0 < F.length
F_irr: F.irreducible
g'CG_acyclic: g * g'⁻¹ * g' * F.val g * g'⁻¹ * g'

g * F.val g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'

(group_action X g').Acyclic (CG X).Acyclic
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g: G
F: Formula G X
F_len: 0 < F.length
F_irr: F.irreducible
g'CG_acyclic: g * g'⁻¹ * g' * F.val g * g'⁻¹ * g'

g * F.val g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g: G
F: Formula G X
F_len: 0 < F.length
F_irr: F.irreducible
g'CG_acyclic: g * (g'⁻¹ * g') * F.val g * (g'⁻¹ * g')

g * F.val g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g: G
F: Formula G X
F_len: 0 < F.length
F_irr: F.irreducible
g'CG_acyclic: g * (g'⁻¹ * g') * F.val g * (g'⁻¹ * g')

g * F.val g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g: G
F: Formula G X
F_len: 0 < F.length
F_irr: F.irreducible
g'CG_acyclic: g * (g'⁻¹ * g') * F.val g * (g'⁻¹ * g')

g * F.val g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'

(group_action X g').Acyclic (CG X).Acyclic
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g: G
F: Formula G X
F_len: 0 < F.length
F_irr: F.irreducible
g'CG_acyclic: g * (g'⁻¹ * g') * F.val g * (g'⁻¹ * g')

g * F.val g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g: G
F: Formula G X
F_len: 0 < F.length
F_irr: F.irreducible
g'CG_acyclic: g * (g'⁻¹ * g') * F.val g * (g'⁻¹ * g')

g * F.val g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g: G
F: Formula G X
F_len: 0 < F.length
F_irr: F.irreducible
g'CG_acyclic: g * (g'⁻¹ * g') * F.val g * (g'⁻¹ * g')

g * F.val g

Goals accomplished! 🐙
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g: G
F: Formula G X
F_len: 0 < F.length
F_irr: F.irreducible
g'CG_acyclic: g * 1 * F.val g * 1

g * F.val g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g: G
F: Formula G X
F_len: 0 < F.length
F_irr: F.irreducible
g'CG_acyclic: g * 1 * F.val g * 1

g * F.val g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'

(group_action X g').Acyclic (CG X).Acyclic
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g: G
F: Formula G X
F_len: 0 < F.length
F_irr: F.irreducible
g'CG_acyclic: g * 1 * F.val g * 1

g * F.val g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g: G
F: Formula G X
F_len: 0 < F.length
F_irr: F.irreducible
g'CG_acyclic: g * F.val g

g * F.val g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
G': Subgroup G
g': G'
g: G
F: Formula G X
F_len: 0 < F.length
F_irr: F.irreducible
g'CG_acyclic: g * F.val g

g * F.val g

Goals accomplished! 🐙
) -------- Equivalence between properties of Cayley graph and groups -------- theorem generative_connected_iff : generative_family X (CG X).Connected :=

Goals accomplished! 🐙
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G

generative_family X (CG X).Connected
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G

mp
generative_family X (CG X).Connected
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
(CG X).Connected generative_family X
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G

generative_family X (CG X).Connected
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G

mp
generative_family X (CG X).Connected
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G

mp
generative_family X (CG X).Connected
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
(CG X).Connected generative_family X
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: generative_family X
g1, g2: G
g1_neq_g2: g1 g2

mp
F, 0 < F.length g1 * F.val = g2
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G

mp
generative_family X (CG X).Connected
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2

mp.intro
F, 0 < F.length g1 * F.val = g2
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G

mp
generative_family X (CG X).Connected
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2

mp.intro
F, 0 < F.length g1 * F.val = g2

Goals accomplished! 🐙
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2

mp.intro
F, 0 < F.length g1 * F.val = g2
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2

g1 * F.val = g2
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2

g1 * (g1⁻¹ * g2) = g2
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2

g1 * F.val = g2
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2

g2 = g2

Goals accomplished! 🐙
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G

mp
generative_family X (CG X).Connected
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2
cancel_prod: g1 * F.val = g2

mp.intro
F, 0 < F.length g1 * F.val = g2

Goals accomplished! 🐙
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2
cancel_prod: g1 * F.val = g2

0 < F.length
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2
cancel_prod: g1 * F.val = g2

0 < F.length
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2
cancel_prod: g1 * F.val = g2

0 < F.length
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h✝: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2
cancel_prod: g1 * F.val = g2
h: ¬0 < F.length

False
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2
cancel_prod: g1 * F.val = g2

0 < F.length
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h✝: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2
cancel_prod: g1 * F.val = g2
h: F.length 0

False
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2
cancel_prod: g1 * F.val = g2

0 < F.length
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h✝: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2
cancel_prod: g1 * F.val = g2
h: F.length 0
F_eq_nil: F.elems = []

False
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2
cancel_prod: g1 * F.val = g2

0 < F.length
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h✝: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2
cancel_prod: g1 * F.val = g2
h: F.length 0
F_eq_nil: F.elems = []

False

Goals accomplished! 🐙
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h✝: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2
cancel_prod: g1 * F.val = g2
h: F.length 0
F_eq_nil: F.elems = []

False
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h✝: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2
cancel_prod: g1 * F.val = g2
h: F.length 0
F_eq_nil: F.elems = []

F.elems.prod = 1
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h✝: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2
cancel_prod: g1 * F.val = g2
h: F.length 0
F_eq_nil: F.elems = []

F.elems.prod = 1
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h✝: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2
cancel_prod: g1 * F.val = g2
h: F.length 0
F_eq_nil: F.elems = []

False
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h✝: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2
cancel_prod: g1 * F.val = g2
h: F.length 0
F_eq_nil: F.elems = []

F.elems.prod = 1
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h✝: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2
cancel_prod: g1 * F.val = g2
h: F.length 0
F_eq_nil: F.elems = []

[].prod = 1
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h✝: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2
cancel_prod: g1 * F.val = g2
h: F.length 0
F_eq_nil: F.elems = []

[].prod = 1
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h✝: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2
cancel_prod: g1 * F.val = g2
h: F.length 0
F_eq_nil: F.elems = []

[].prod = 1
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h✝: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2
cancel_prod: g1 * F.val = g2
h: F.length 0
F_eq_nil: F.elems = []

False

Goals accomplished! 🐙
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2
cancel_prod: g1 * F.val = g2

0 < F.length
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h✝: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2
cancel_prod: g1 * F.val = g2
h: F.length 0
F_eq_nil: F.elems = []
F_val_eq_1: F.val = 1

False
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h✝: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2
cancel_prod: g1 * 1 = g2
h: F.length 0
F_eq_nil: F.elems = []
F_val_eq_1: F.val = 1

False
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h✝: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2
cancel_prod: g1 * 1 = g2
h: F.length 0
F_eq_nil: F.elems = []
F_val_eq_1: F.val = 1

False
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h✝: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2
cancel_prod: g1 * 1 = g2
h: F.length 0
F_eq_nil: F.elems = []
F_val_eq_1: F.val = 1

False
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2
cancel_prod: g1 * F.val = g2

0 < F.length
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h✝: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2
cancel_prod: g1 * 1 = g2
h: F.length 0
F_eq_nil: F.elems = []
F_val_eq_1: F.val = 1

False
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h✝: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2
cancel_prod: g1 * 1 = g2
h: F.length 0
F_eq_nil: F.elems = []
F_val_eq_1: F.val = 1

False

Goals accomplished! 🐙
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h✝: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2
cancel_prod: g1 = g2
h: F.length 0
F_eq_nil: F.elems = []
F_val_eq_1: F.val = 1

False
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h✝: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2
cancel_prod: g1 = g2
h: F.length 0
F_eq_nil: F.elems = []
F_val_eq_1: F.val = 1

False
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: generative_family X
g1, g2: G
g1_neq_g2: g1 g2
F: Formula G X
F_val: F.val = g1⁻¹ * g2
cancel_prod: g1 * F.val = g2

0 < F.length

Goals accomplished! 🐙

Goals accomplished! 🐙
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G

mp
generative_family X (CG X).Connected

Goals accomplished! 🐙
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G

generative_family X (CG X).Connected
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: (CG X).Connected
g: G

mpr
F, F.val = g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G

generative_family X (CG X).Connected
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: (CG X).Connected
g: G
hg: g = 1

pos
F, F.val = g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: (CG X).Connected
g: G
hg: ¬g = 1
F, F.val = g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G

generative_family X (CG X).Connected
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: (CG X).Connected
g: G
hg: g = 1

pos
F, F.val = g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: (CG X).Connected
g: G
hg: g = 1

pos
F, F.val = g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: (CG X).Connected
g: G
hg: ¬g = 1
F, F.val = g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: (CG X).Connected
g: G
hg: g = 1
F:= { elems := [], elems_in_X := }: Formula G X

pos
F, F.val = g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: (CG X).Connected
g: G
hg: g = 1

pos
F, F.val = g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: (CG X).Connected
g: G
hg: g = 1
F:= { elems := [], elems_in_X := }: Formula G X

h
F.val = g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: (CG X).Connected
g: G
hg: g = 1

pos
F, F.val = g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: (CG X).Connected
g: G
hg: g = 1
F:= { elems := [], elems_in_X := }: Formula G X

h
F.val = g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: (CG X).Connected
g: G
hg: g = 1
F:= { elems := [], elems_in_X := }: Formula G X

h
F.val = g

Goals accomplished! 🐙
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: (CG X).Connected
g: G
hg: g = 1
F:= { elems := [], elems_in_X := }: Formula G X

h
F.elems.prod = g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: (CG X).Connected
g: G
hg: g = 1
F:= { elems := [], elems_in_X := }: Formula G X

h
F.val = g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: (CG X).Connected
g: G
hg: g = 1
F:= { elems := [], elems_in_X := }: Formula G X

h
F.elems.prod = g

Goals accomplished! 🐙
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: (CG X).Connected
g: G
hg: g = 1
F:= { elems := [], elems_in_X := }: Formula G X

h
[].prod = g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: (CG X).Connected
g: G
hg: g = 1
F:= { elems := [], elems_in_X := }: Formula G X

h
F.val = g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: (CG X).Connected
g: G
hg: g = 1
F:= { elems := [], elems_in_X := }: Formula G X

h
[].prod = 1
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: (CG X).Connected
g: G
hg: g = 1
F:= { elems := [], elems_in_X := }: Formula G X

h
F.val = g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: (CG X).Connected
g: G
hg: g = 1
F:= { elems := [], elems_in_X := }: Formula G X

h
[].prod = 1

Goals accomplished! 🐙
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: (CG X).Connected
g: G
hg: g = 1
F:= { elems := [], elems_in_X := }: Formula G X

h
F.val = g

Goals accomplished! 🐙
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G

generative_family X (CG X).Connected
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: (CG X).Connected
g: G
hg: g 1

neg
F, F.val = g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G

generative_family X (CG X).Connected
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: (CG X).Connected
g: G
hg: g 1
F: Formula G X
left✝: 0 < F.length
F_val: 1 * F.val = g

neg.intro.intro
F, F.val = g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G

generative_family X (CG X).Connected
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: (CG X).Connected
g: G
hg: g 1
F: Formula G X
left✝: 0 < F.length
F_val: 1 * F.val = g

h
F.val = g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G

generative_family X (CG X).Connected
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: (CG X).Connected
g: G
hg: g 1
F: Formula G X
left✝: 0 < F.length
F_val: 1 * F.val = g

h
F.val = g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: (CG X).Connected
g: G
hg: g 1
F: Formula G X
left✝: 0 < F.length
F_val: 1 * F.val = g

h
1 * F.val = g
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: (CG X).Connected
g: G
hg: g 1
F: Formula G X
left✝: 0 < F.length
F_val: 1 * F.val = g

h
1 * F.val = g
theorem free_acyclic_iff : free_family X (CG X).Acyclic :=

Goals accomplished! 🐙
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G

free_family X (CG X).Acyclic
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G

mp
free_family X (CG X).Acyclic
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
(CG X).Acyclic free_family X
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G

free_family X (CG X).Acyclic
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G

mp
free_family X (CG X).Acyclic
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G

mp
free_family X (CG X).Acyclic
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
(CG X).Acyclic free_family X
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: free_family X

mp
(CG X).Acyclic
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G

mp
free_family X (CG X).Acyclic
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: free_family X
h_acyclic: ¬(CG X).Acyclic

mp
False
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G

mp
free_family X (CG X).Acyclic
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: free_family X
h_acyclic: ¬(CG X).Acyclic

mp
False
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: free_family X
h_acyclic: ¬(CG X).Acyclic

mp
False

Goals accomplished! 🐙
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: free_family X
h_acyclic: ¬∀ (g : G) (F : Formula G X), 0 < F.length F.irreducible g * F.val g

mp
False
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: free_family X
h_acyclic: ¬∀ (g : G) (F : Formula G X), 0 < F.length F.irreducible g * F.val g

mp
False
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G

mp
free_family X (CG X).Acyclic
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: free_family X
h_acyclic: g F, (0 < F.length F.irreducible) g * F.val = g

mp
False
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G

mp
free_family X (CG X).Acyclic
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: free_family X
g: G
F: Formula G X
F_val: g * F.val = g
F_len: 0 < F.length
F_irr: F.irreducible

mp.intro.intro.intro.intro
False
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G

mp
free_family X (CG X).Acyclic
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: free_family X
g: G
F: Formula G X
F_val: g * F.val = g
F_len: 0 < F.length
F_irr: F.irreducible
F_val_eq_1: F.val = 1

mp.intro.intro.intro.intro
False
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G

mp
free_family X (CG X).Acyclic

Goals accomplished! 🐙
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G

free_family X (CG X).Acyclic
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: (CG X).Acyclic

mpr
free_family X
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G

free_family X (CG X).Acyclic
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: (CG X).Acyclic
F: Formula G X
F_len: 0 < F.length
F_irr: F.irreducible

mpr
F.val 1
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G

free_family X (CG X).Acyclic
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
h: (CG X).Acyclic
F: Formula G X
F_len: 0 < F.length
F_irr: F.irreducible
F_val_eq_1: F.val = 1

mpr
False
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G

free_family X (CG X).Acyclic
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
F: Formula G X
F_len: 0 < F.length
F_irr: F.irreducible
F_val_eq_1: F.val = 1
h: 1 * F.val 1

mpr
False
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G

free_family X (CG X).Acyclic
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
F: Formula G X
F_len: 0 < F.length
F_irr: F.irreducible
F_val_eq_1: F.val = 1
h: 1 * F.val 1

mpr
False
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
F: Formula G X
F_len: 0 < F.length
F_irr: F.irreducible
F_val_eq_1: F.val = 1
h: 1 * 1 1

mpr
False
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
F: Formula G X
F_len: 0 < F.length
F_irr: F.irreducible
F_val_eq_1: F.val = 1
h: 1 * F.val 1

mpr
False
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
F: Formula G X
F_len: 0 < F.length
F_irr: F.irreducible
F_val_eq_1: F.val = 1
h: 1 1

mpr
False
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
F: Formula G X
F_len: 0 < F.length
F_irr: F.irreducible
F_val_eq_1: F.val = 1
h: 1 1

mpr
False
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G
F: Formula G X
F_len: 0 < F.length
F_irr: F.irreducible
F_val_eq_1: F.val = 1
h: 1 1

mpr
False
G: Type u_1
inst✝¹: Fintype G
inst✝: FinGroup G
X: Set G

free_family X (CG X).Acyclic

Goals accomplished! 🐙
theorem tree_free_iff [Inhabited G] : is_free_group G ( (X : Set G), (CG X).is_tree) :=

Goals accomplished! 🐙
G: Type u_1
inst✝²: Fintype G
inst✝¹: FinGroup G
inst✝: Inhabited G

is_free_group G X, (CG X).is_tree
G: Type u_1
inst✝²: Fintype G
inst✝¹: FinGroup G
inst✝: Inhabited G

mp
is_free_group G X, (CG X).is_tree
G: Type u_1
inst✝²: Fintype G
inst✝¹: FinGroup G
inst✝: Inhabited G
( X, (CG X).is_tree) is_free_group G
G: Type u_1
inst✝²: Fintype G
inst✝¹: FinGroup G
inst✝: Inhabited G

is_free_group G X, (CG X).is_tree
G: Type u_1
inst✝²: Fintype G
inst✝¹: FinGroup G
inst✝: Inhabited G

mp
is_free_group G X, (CG X).is_tree
G: Type u_1
inst✝²: Fintype G
inst✝¹: FinGroup G
inst✝: Inhabited G

mp
is_free_group G X, (CG X).is_tree
G: Type u_1
inst✝²: Fintype G
inst✝¹: FinGroup G
inst✝: Inhabited G
( X, (CG X).is_tree) is_free_group G
G: Type u_1
inst✝²: Fintype G
inst✝¹: FinGroup G
inst✝: Inhabited G
X: Set G
X_gen: generative_family X
X_free: free_family X

mp
X, (CG X).is_tree
G: Type u_1
inst✝²: Fintype G
inst✝¹: FinGroup G
inst✝: Inhabited G

mp
is_free_group G X, (CG X).is_tree

Goals accomplished! 🐙
G: Type u_1
inst✝²: Fintype G
inst✝¹: FinGroup G
inst✝: Inhabited G

is_free_group G X, (CG X).is_tree
G: Type u_1
inst✝²: Fintype G
inst✝¹: FinGroup G
inst✝: Inhabited G
X: Set G
CG_connected: (CG X).Connected
CG_acyclic: (CG X).Acyclic

mpr
is_free_group G
G: Type u_1
inst✝²: Fintype G
inst✝¹: FinGroup G
inst✝: Inhabited G

is_free_group G X, (CG X).is_tree

Goals accomplished! 🐙