1+ #include < iostream>
2+ #include " permutation.h"
3+ #include " action.h"
4+ #include " group.h"
5+ #include " johnson.h"
6+ #include " configuration.h"
7+ #include " align.h"
8+
9+
10+ int main () {
11+ int n = 5 ;
12+ Group Sn ( new SymmetricGroup ( n ) );
13+ NaturalSetAction a ( Sn, Sn->degree (), 2 );
14+ std::map<std::vector<int >,int > reverse_anonymize;
15+ Group G = a.anonymize ( &reverse_anonymize );
16+ std::cout << G->generators () << std::endl;
17+ std::cout << " ---" << std::endl;
18+ std::cout << reverse_anonymize << std::endl;
19+ std::cout << " ---" << std::endl;
20+ NaturalAction G_action ( G );
21+ auto blocks = G_action.systemOfImprimitivity ();
22+ std::cout << blocks.domain () << std::endl;
23+ std::cout << " ---" << std::endl;
24+ // do cameron magic
25+ std::deque<std::vector<int >> Gamma;
26+ for ( auto x : range (0 ,n) ) {
27+ std::vector<int > v;
28+ for ( auto t : a.domain () ) {
29+ if ( std::find ( t.begin (), t.end (), x ) != t.end () )
30+ v.push_back ( reverse_anonymize[t] );
31+ }
32+ std::sort ( v.begin (), v.end () );
33+ Gamma.emplace_back ( std::move ( v ) );
34+ }
35+ std::cout << Gamma << std::endl;
36+ RestrictedNaturalSetAction Gamma_action ( G, Gamma );
37+ // auto johnson_blocks = blocks;
38+ // auto Sk = johnson_blocks.anonymize();
39+ // std::cout << johnson_blocks.domain() << std::endl;
40+ std::cout << " ---" << std::endl;
41+ std::map<std::vector<int >,int > reverse_anonymize2;
42+ Group H = Gamma_action.anonymize ( &reverse_anonymize2 );
43+
44+ NaturalAction H_action ( H );
45+ std::cout << reverse_anonymize2 << std::endl;
46+ std::cout << " ---" << std::endl;
47+ std::cout << H->generators () << std::endl;
48+ std::cout << " ---" << std::endl;
49+ auto standard_blocks = JohnsonStandardBlocks ( Gamma_action );
50+ std::cout << standard_blocks.domain () << std::endl;
51+
52+ std::cout << " -------------------------------" << std::endl;
53+ RelationalStructure conf1 (
54+ std::vector<std::set<std::vector<int >>>({
55+ std::set<std::vector<int >>({
56+ std::vector<int >({0 ,0 }),std::vector<int >({1 ,1 }),std::vector<int >({2 ,2 }),std::vector<int >({3 ,3 }),std::vector<int >({4 ,4 })
57+ }),
58+ std::set<std::vector<int >>({
59+ std::vector<int >({0 ,1 }),std::vector<int >({1 ,0 }),
60+ std::vector<int >({1 ,3 }),std::vector<int >({3 ,1 }),
61+ std::vector<int >({0 ,4 }),std::vector<int >({4 ,0 }),
62+ std::vector<int >({2 ,4 }),std::vector<int >({4 ,2 })
63+ }),
64+ std::set<std::vector<int >>({
65+ std::vector<int >({1 ,2 }),std::vector<int >({2 ,1 }),
66+ std::vector<int >({1 ,4 }),std::vector<int >({4 ,1 }),
67+ std::vector<int >({3 ,4 }),std::vector<int >({4 ,3 }),
68+ std::vector<int >({0 ,2 }),std::vector<int >({2 ,0 })
69+ }),
70+ std::set<std::vector<int >>({
71+ std::vector<int >({0 ,3 }),std::vector<int >({3 ,0 }),
72+ std::vector<int >({2 ,3 }),std::vector<int >({3 ,2 })
73+ })
74+ })
75+ , 5 );
76+ conf1.WeisfellerLeman ();
77+ std::cout << conf1.relations () << std::endl;
78+ std::cout << " -------------------------------" << std::endl;
79+ RelationalStructure conf2 (
80+ std::vector<std::set<std::vector<int >>>({
81+ std::set<std::vector<int >>({
82+ std::vector<int >({0 ,0 }),std::vector<int >({1 ,1 }),std::vector<int >({2 ,2 }),std::vector<int >({3 ,3 }),std::vector<int >({4 ,4 })
83+ }),
84+ std::set<std::vector<int >>({
85+ std::vector<int >({0 ,1 }),std::vector<int >({1 ,0 }),
86+ std::vector<int >({0 ,2 }),std::vector<int >({2 ,0 }),
87+ std::vector<int >({0 ,4 }),std::vector<int >({4 ,0 }),
88+ std::vector<int >({1 ,2 }),std::vector<int >({2 ,1 })
89+ }),
90+ std::set<std::vector<int >>({
91+ std::vector<int >({1 ,3 }),std::vector<int >({3 ,1 }),
92+ std::vector<int >({2 ,4 }),std::vector<int >({4 ,2 }),
93+ std::vector<int >({1 ,4 }),std::vector<int >({4 ,1 }),
94+ std::vector<int >({3 ,4 }),std::vector<int >({4 ,3 })
95+
96+ }),
97+ std::set<std::vector<int >>({
98+ std::vector<int >({0 ,3 }),std::vector<int >({3 ,0 }),
99+ std::vector<int >({2 ,3 }),std::vector<int >({3 ,2 })
100+ })
101+ })
102+ , 5 );
103+ conf2.WeisfellerLeman ();
104+ std::cout << conf2.relations () << std::endl;
105+ std::cout << " -------------------------------" << std::endl;
106+ FurstHopfcroftLuksTail fhlt;
107+ std::deque<std::pair<Permutation,Permutation>> generator_mapping;
108+ fhlt.create ( H, G, )
109+
110+ // Permutation sigma = pullback( H->generators()[0], reverse_anonymize2, Gamma_action.domain() );
111+ // std::cout << sigma << std::endl;
112+
113+ return 0 ;
114+ }
0 commit comments