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 600000structure Graph (G : Type*) where
Adj : Set (G × G)
Connected : Prop
Acyclic : Propnamespace 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⟩) ≠1elseif h : F.length =1then F.get ⟨0, ⋯⟩ ≠1else 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