def count_existential(quantifiers): ''' Returns the number of universally quantified variables ''' quantified_variables = [] for quantifier in quantifiers: Translation.get_existentially_quantified(quantifier, quantified_variables)
def existential_predicate(predicate, quantifiers): if predicate == [] or quantifiers == []: return False existentials = [] for quant in quantifiers: Translation.get_existentially_quantified(quant, existentials) if all([x in existentials for x in predicate[1:]]): return predicate else: return False
def generate_quantifier(sentence, quantifiers): ''' Take a sentence and set of quantifiers and trim the quantifiers so only variables in the sentence exist in the quantifier. Return the new quantifier and sentence together in a list. return list axiom, [[quantifiers], [sentence]] ''' new_quantifiers = quantifiers[:] predicates = [] Translation.find_binary_predicates(sentence, predicates) Translation.find_unary_predicates(sentence, predicates) predicates = list(set([get_predicate_name(p) for p in predicates])) #print("[+] Found Predicates:", predicates) quantified_variables = [] for quantifier in new_quantifiers: Translation.get_universally_quantified(quantifier, quantified_variables) Translation.get_existentially_quantified(quantifier, quantified_variables) quantified_variables = list(set(quantified_variables)) #print("[+] Found Quantified Variables:", quantified_variables) flattened_axiom = list(set(list(Util.flatten(sentence)))) variables = list(filter(Translation.is_nonlogical, flattened_axiom)) variables = [v for v in variables if v not in predicates] #print("[+] Found Variables:", variables) variables_to_trim = [v for v in quantified_variables if v not in variables] #print("[+] Removing Variables:", variables_to_trim) #print("[+] Starting Quantifier:", new_quantifiers) new_quantifiers = trim_quantifier(new_quantifiers, variables_to_trim) #print("[+] Generated Quantifier:", new_quantifiers) return [copy.deepcopy(new_quantifiers), copy.deepcopy(sentence)]