/* **************************************
   "braid.h"
   ブレイドに対する操作−インタフェイス部
   ************************************** */

#include <stdio.h>
#include "list.h"

void create_list(List&,FILE*);            // 生成元リストの作成
void create_list(List&);                  // 生成元リストの作成
void display_list(List&,FILE*);           // 生成元リストの表示
void display_list(List&);                 // 生成元リストの表示
void display_canonical(Canonical&);       // 標準形の表示
void display_canonical(Canonical&,FILE*); // 標準形の表示

void restore_canonical(Canonical&,List&);       // 標準形を生成元の積に戻す
void copy_list(List&,List&);                    // 生成元リストのコピー
void product(List&,List&,List&);                // ブレイドの積を計算
void product(Canonical&,Canonical&,Canonical&); // ブレイドの積を計算
void inverse(List&,List&);                      // 逆元の作成
void inverse(Canonical&,Canonical&);            // 逆元の作成

void fundamental(List&);         // 基本ブレイドの作成
void collect_delta(List&,Cell*); // 基本ブレイドを左に集める
bool judge_same(List&,List&);    // 同じ表現であるかどうかの判定
int equal_list(List&,Cell* []);  // 同値類の列挙
int judge_braid(List&);          // 順列,基本,冗長ブレイドの判定