let one_shift(alist) =
(List.tl alist)@[List.hd alist];;
let rec all_shifts_aux(alist,n) =
if n = 0 then []
else [one_shift(alist)]::all_shifts_aux(one_shift(alist), n-1);;
let all_shift(alist) =
all_shifts_aux(one_shift(alist), (List.length alist)-1);;
let all_case(alist) =
[alist]::all_shift(alist);;
let rec try_all_sqA_aux(alist, n) =
if(sqA(alist)) then true
else if (n = 0) then false
else try_all_sqA_aux(one_shift(alist),n-1);;
let try_all_sqA(alist) =
try_all_sqA_aux(alist, List.length alist);;
let rec try_all_eqtriA_aux(alist, n) =
if(eqtriA(alist)) then true
else if (n = 0) then false
else try_all_eqtriA_aux(one_shift(alist),n-1);;
let try_all_eqtriA(alist) =
try_all_eqtriA_aux(alist, List.length alist);;
(List.tl alist)@[List.hd alist];;
let rec all_shifts_aux(alist,n) =
if n = 0 then []
else [one_shift(alist)]::all_shifts_aux(one_shift(alist), n-1);;
let all_shift(alist) =
all_shifts_aux(one_shift(alist), (List.length alist)-1);;
let all_case(alist) =
[alist]::all_shift(alist);;
let rec try_all_sqA_aux(alist, n) =
if(sqA(alist)) then true
else if (n = 0) then false
else try_all_sqA_aux(one_shift(alist),n-1);;
let try_all_sqA(alist) =
try_all_sqA_aux(alist, List.length alist);;
let rec try_all_eqtriA_aux(alist, n) =
if(eqtriA(alist)) then true
else if (n = 0) then false
else try_all_eqtriA_aux(one_shift(alist),n-1);;
let try_all_eqtriA(alist) =
try_all_eqtriA_aux(alist, List.length alist);;