public static string NonRegularCheckWord(ArithmeticLanguage lang, int n, string word) { if (word.Length < n) { return("<false>Word is too short.</false>"); } foreach (char c in word) { if (!lang.alphabet.Contains(c + "")) { return("<false>Word contains illegal letters.</false>"); } } if (lang.symbolic_string.isFlat()) { SymbolicString wordSS = Parser.parseSymbolicString(word, lang.alphabet.ToList()); if (ProofChecker.checkContainment(wordSS, lang, LogicalExpression.True())) { return("<true></true>"); } else { return("<false>Word is not in the language.</false>"); } } else { throw new PumpingLemmaException("Arithmetic Language must be flat!"); } }
public static Tuple <string, string, string> NonRegularGetPumpableSplit(ArithmeticLanguage language, string word, int n) { foreach (var split in possibleSplits(word, n)) { SymbolicString str = splitToSymbStr(language.alphabet.ToList(), split.Item1, split.Item2, split.Item3); if (ProofChecker.checkContainment(str, language, LogicalExpression.True())) { return(split); } } return(null); }
public static bool NonRegularCheckI(ArithmeticLanguage language, string start, string mid, string end, int i) { string fullWord = pumpMid(start, mid, end, i); if (language.symbolic_string.isFlat()) { SymbolicString wordSS = Parser.parseSymbolicString(fullWord.ToString(), language.alphabet.ToList()); return(ProofChecker.checkContainment(wordSS, language, LogicalExpression.True())); } else { throw new PumpingLemmaException("Arithmetic Language must be flat!"); } }
public static string NonRegularGetUnpumpableWord(ArithmeticLanguage language, SymbolicString unpumpableWord, int n) { Dictionary <VariableType, int> assignment = new Dictionary <VariableType, int>(); assignment.Add(VariableType.Variable("n"), n); string word = pumpedWord(unpumpableWord, assignment); SymbolicString ss = SymbolicString.FromTextDescription(language.alphabet.ToList(), word); while (!ProofChecker.checkContainment(ss, language, LogicalExpression.True())) { assignment[VariableType.Variable("n")]++; word = pumpedWord(unpumpableWord, assignment); ss = SymbolicString.FromTextDescription(language.alphabet.ToList(), word); } return(word); }
public static int NonRegularGetI(ArithmeticLanguage language, string start, string mid, string end) { SymbolicString matchingString = splitToSymbStr(language.alphabet.ToList(), start, mid, end); if (ProofChecker.checkContainment(matchingString, language, LogicalExpression.True())) { return(1); // AI surrenders } else { int i = 0; do { string word = pumpMid(start, mid, end, i); SymbolicString ss = SymbolicString.FromTextDescription(language.alphabet.ToList(), word); if (!ProofChecker.checkContainment(ss, language, LogicalExpression.True())) { return(i); } i++; } while (i < 99); //for debugging purposes return(-1); } }