Read("RegLangUtilities.g"); # I = intersection (variable numbers of args) # U = union (variable number of args) # C = complement # P = product (variable numbers of args) # SS = Sigma Star # S = Star (variable number of args, implicit union) # To define letters, use Letter(index, alphabetSize) # The rational expressions package is quite sensitive to everything # being on the same sized alphabet, so make sure to always use the # same (or a global variable) AlphabetSize := 6; a := Letter(1, AlphabetSize); b := Letter(2, AlphabetSize); c := Letter(3, AlphabetSize); d := Letter(4, AlphabetSize); e := Letter(5, AlphabetSize); f := Letter(6, AlphabetSize); SS := S(a,b,c,d,e,f); Lang := I( C(P(SS, U(b,c,d), U(a,e,f), SS)), C(P(SS, f, a, SS)), C(P(SS, d, b, SS)), C(P(e, SS)), C(P(S(a,b,d,e), d, S(a,b,c,d,e))), C(P(S(a,b,c,d,e), b, S(a,b,c,d,e))), C(P(SS, b, S(a,e,f), S(d), S(a,b,c,e,f))), C(P(S(a,d,f), f, S(a,d,e,f))), C(P(S(a,e,f), c, SS)) ); # Useful functions: # Spec(L) = Spectrum of L (up to length 15) # AW(L, n) = Accepted words of L of length n # GF(L) = generating function