Replay strict complete intersections and verify the final normality pass.
Equations
- Hex.PermGroup.Core.check G H K trace = match Hex.PermGroup.Core.replay G H trace with | none => false | some L => L.sameGroup K && Hex.PermGroup.Normal.check G K
Instances For
theorem
Hex.PermGroup.Core.Result.inside
{n : Nat}
{G H : Group n}
(c : Result G H)
:
c.group.IsSubgroup H
theorem
Hex.PermGroup.Core.Result.greatest
{n : Nat}
{G H : Group n}
(c : Result G H)
(N : Group n)
(hN : N.IsSubgroup H)
(hn : Normal.check G N = true)
:
N.IsSubgroup c.group
A complete intersection with the inverse conjugate named by a failed normality test. Its generators and search tree are retained for replay.
Equations
Instances For
theorem
Hex.PermGroup.Core.cut_spec
{n : Nat}
(G H : Group n)
(i : Fin G.chain.generators.size)
(p : Perm n)
:
Generated (cut G H i).group.generators p ↔ Generated H.generators p ∧ Generated H.generators (G.chain.generators[↑i].conj p)
theorem
Hex.PermGroup.Core.cut_strict
{n : Nat}
(G H : Group n)
(i : Fin G.chain.generators.size)
(j : Fin H.generators.size)
(hn : ¬Generated H.generators (G.chain.generators[↑i].conj H.generators[↑j]))
:
theorem
Hex.PermGroup.Core.cut_step
{n : Nat}
(G H : Group n)
(i : Fin G.chain.generators.size)
(j : Fin H.generators.size)
(hn : ¬Generated H.generators (G.chain.generators[↑i].conj H.generators[↑j]))
:
theorem
Hex.PermGroup.Core.cut_decreases
{n : Nat}
(G H : Group n)
(i : Fin G.chain.generators.size)
(j : Fin H.generators.size)
(hn : ¬Generated H.generators (G.chain.generators[↑i].conj H.generators[↑j]))
:
Equations
- Hex.PermGroup.Core.build G H = Hex.PermGroup.Core.iterate G H.order H ⋯
Instances For
The greatest normal subgroup of G contained in H, with complete
intersection certificates and a terminal normality check.
Equations
- G.coreCert H _h = Hex.PermGroup.Core.build G H
Instances For
Instances For
theorem
Hex.PermGroup.Group.mem_core
{n : Nat}
(G H : Group n)
(h : H.IsSubgroup G)
(p : Perm n)
:
Generated (G.core H h).generators p ↔ ∀ (g : Perm n), Generated G.generators g → Generated H.generators (g.conj p)
theorem
Hex.PermGroup.Group.core_inside
{n : Nat}
(G H : Group n)
(h : H.IsSubgroup G)
:
(G.core H h).IsSubgroup H
theorem
Hex.PermGroup.Group.core_subgroup
{n : Nat}
(G H : Group n)
(h : H.IsSubgroup G)
:
(G.core H h).IsSubgroup G
theorem
Hex.PermGroup.Group.le_core
{n : Nat}
(G H N : Group n)
(h : H.IsSubgroup G)
(hn : Normal.check G N = true)
: