def generateproposition(array): text = " ".join(array) print text text = text.replace(' (', '(').replace('( ', '(').replace(' ) ', '(').replace(' )', '(') formulas = text.split('(') formulas = filter(None, formulas) components = [] print formulas ok = False for formula in formulas: if validation_premisse(formula.split(" ")): ok = True else: ok = False components.append(Component(formula, ok)) #Verificar se todos os components são validos. premissa = [] propositions = [] if components_valid(components): if '->' in components[0].text: premissa = components[0].text.split(' -> ') propositions.append( Propostion(premissa[0], '->', premissa[1], components[0].text)) print premissa elif 'v' in components[0].text: premissa = components[0].text.split(' v ') propositions.append( Propostion(premissa[0], 'v', premissa[1], components[0].text)) print premissa elif '^' in components[0].text: premissa = components[0].text.split(' ^ ') propositions.append( Propostion(premissa[0], '^', premissa[1], components[0].text)) print premissa else: i = 0 print 'oi' #verificar se existe um conector sozinho index = isConectorComponent(components) if index: print index
def generateproposition(array): text = " ".join(array) print text text = text.replace(' (', '(').replace('( ', '(').replace(' ) ', '(').replace(' )', '(') formulas = text.split('(') formulas = filter(None, formulas) components = [] print formulas ok = False for formula in formulas: if validation_premisse(formula.split(" ")): ok = True else: ok = False components.append(Component(formula, ok)) #Verificar se todos os components são validos. premissa = [] propositions = [] if components_valid(components): if '->' in components[0].text: premissa = components[0].text.split(' -> ') propositions.append(Propostion(premissa[0], '->', premissa[1], components[0].text)) print premissa elif 'v' in components[0].text: premissa = components[0].text.split(' v ') propositions.append(Propostion(premissa[0], 'v', premissa[1], components[0].text)) print premissa elif '^' in components[0].text: premissa = components[0].text.split(' ^ ') propositions.append(Propostion(premissa[0], '^', premissa[1], components[0].text)) print premissa else: i = 0 print 'oi' #verificar se existe um conector sozinho index = isConectorComponent(components) if index: print index
def rules_bithen(input): """ :argument - Função responsável por encontrar casos de bimplica e aplicar a FNC :param - Recebe um array da proposição :return - Retorna a proposição em string """ #Transformando entrada em String str_proposition = " ".join(input) #Dicionario que irá salvar as chaves criadas e as formulas tratadas, sem bimplica. dict = {} keys = [] #Nomes das chaves key_name = 'key' key_num = 1 #Encontrando formulas mais internas str_proposition = str_proposition.replace(' ) ', ' ( ').replace(' )', ' ( ') propositions = str_proposition.split(' ( ') propositions = filter(None, propositions) loop = 0 bimplica = 0 #Loop para eliminar por equivalência o conector bimplica while '<->' in " ".join(propositions): #Variavel auxilar para acompanhamento da varredura do array de proposições count = 1 for proposition in propositions: array = proposition.split(' ') array = filter(None, array) if validation_premisse(array): #Verificando se a formule tem bimplica if '<->' in proposition: bimplica += 1 #Seperando em componentes a proposition a partir do bimplica components = proposition.split(' <-> ') components = filter(None, components) #Quantidade de componentes size = len(components) if size > 2: components = [components[0], components[size -1]] if components[0] in key_name: p1 = dict.get(components[0]) else: p1 = components[0].split(' ') if components[1] in keys: p2 = dict.get(components[1]) else: p2 = components[1].split(' ') formule = elimination_bithen(p1, p2) if count > 1: key_name ='key_name'+ str(key_num) keys.append(key_name) dict[key_name] = formule aux = propositions[count -2] propositions[count - 2] = aux +' '+ key_name propositions.remove(proposition) key_num += 1 else: propositions = formule else: if count > 1: key_name ='key'+ str(key_num) keys.append(key_name) dict[key_name] = array aux = propositions[count -2] propositions[count - 2] = aux +' '+ key_name propositions.remove(proposition) key_num += 1 else: print 'invalida' count += 1 loop += 1 propositions = filter(None, propositions) propositions = syncFormule(propositions, dict) return propositions
def rules_then (input): """ :argument - Função responsável por encontrar casos de implica e aplicar a FNC :param - Recebe um array da proposição :return - Retorna a proposição em string """ #Proposição em string str_proposition = " ".join(input) #Dicionário com o valor referente a cada chave instancia dict = {} #Variaveis auxilares para criação dos nomes da chaves key_name = 'key' key_num = 1 #Array de chaves criadas keys = [] #Processo para encontrar a formula mais interna str_proposition = str_proposition.replace(' ) ', ' ( ').replace(' )', ' ( ') propositions = str_proposition.split(' ( ') propositions = filter(None, propositions) #Eliminando todos os implicas while ' ->' in " ".join(propositions): #Variavel auxilar utiliza na varredura do array de proposições count = 1 #Removendo espaços em branco do array propositions = filter(None, propositions) #Inciando varredura do array for proposition in propositions: #Transformando a string em array separado por espaço em branco e removendo vazios do array array = proposition.split(' ') array = filter(None, array) #Verificando se a proposição interna é valida if validation_premisse(array): #Verificando se a formule tem implica if '->' in array: #Separando as proposições em componentes components = proposition.split(' -> ') #Quantidade de componentes size = len(components) #Verificando se a operação implica possui mais de 2 componentes if size > 2: components = [components[0], components[size -1]] #Verficando se os componentes são chaves do dicionário if components[0] in key_name: #Recuperando componente/formula p1 = dict.get(components[0]) else: #Seperando o primeiro componente em um array p1 = components[0].split(' ') if components[1] in keys: #Recuperando componente/formula p2 = dict.get(components[1]) else: #Seperando o segundo componente em um array p2 = components[1].split(' ') #Eliminando implica por sua equivalência formule = elimination_then(p1, p2) #Verificando se é a primeira formula das proposições if count > 1: #Apos a resolução atualizamos a formula anterior com a formula sem implica key_name ='key'+ str(key_num) #Criando uma nova chave keys.append(key_name) dict[key_name] = formule #Adicionando chave e formula (Valor) no dicionário #Variavel auxilar para armazenar o valor da formula anterior aux = propositions[count -2] #Atualizando o valor da formula anterior acrescentando o valor da formula sem implica propositions[count - 2] = aux +' '+ key_name #Removendo formula solucionada propositions.remove(proposition) #Atualizando variavel para criação de chaves key_num += 1 else: #Caso seja a primeira formula do array, apenas atualizamos o seu valor propositions = formule else: print 'invalida' #Contador para saber a posição do array count += 1 #Após aplicar as regras de equivalência referente ao implicar vamos sincronizar com a formula final. propositions = syncFormule(propositions, dict) return propositions
def rules_bithen(input): """ :argument - Função responsável por encontrar casos de bimplica e aplicar a FNC :param - Recebe um array da proposição :return - Retorna a proposição em string """ #Transformando entrada em String str_proposition = " ".join(input) #Dicionario que irá salvar as chaves criadas e as formulas tratadas, sem bimplica. dict = {} keys = [] #Nomes das chaves key_name = 'key' key_num = 1 #Encontrando formulas mais internas str_proposition = str_proposition.replace(' ) ', ' ( ').replace(' )', ' ( ') propositions = str_proposition.split(' ( ') propositions = filter(None, propositions) loop = 0 bimplica = 0 #Loop para eliminar por equivalência o conector bimplica while '<->' in " ".join(propositions): #Variavel auxilar para acompanhamento da varredura do array de proposições count = 1 for proposition in propositions: array = proposition.split(' ') array = filter(None, array) if validation_premisse(array): #Verificando se a formule tem bimplica if '<->' in proposition: bimplica += 1 #Seperando em componentes a proposition a partir do bimplica components = proposition.split(' <-> ') components = filter(None, components) #Quantidade de componentes size = len(components) if size > 2: components = [components[0], components[size - 1]] if components[0] in key_name: p1 = dict.get(components[0]) else: p1 = components[0].split(' ') if components[1] in keys: p2 = dict.get(components[1]) else: p2 = components[1].split(' ') formule = elimination_bithen(p1, p2) if count > 1: key_name = 'key_name' + str(key_num) keys.append(key_name) dict[key_name] = formule aux = propositions[count - 2] propositions[count - 2] = aux + ' ' + key_name propositions.remove(proposition) key_num += 1 else: propositions = formule else: if count > 1: key_name = 'key' + str(key_num) keys.append(key_name) dict[key_name] = array aux = propositions[count - 2] propositions[count - 2] = aux + ' ' + key_name propositions.remove(proposition) key_num += 1 else: print 'invalida' count += 1 loop += 1 propositions = filter(None, propositions) propositions = syncFormule(propositions, dict) return propositions
def rules_then(input): """ :argument - Função responsável por encontrar casos de implica e aplicar a FNC :param - Recebe um array da proposição :return - Retorna a proposição em string """ #Proposição em string str_proposition = " ".join(input) #Dicionário com o valor referente a cada chave instancia dict = {} #Variaveis auxilares para criação dos nomes da chaves key_name = 'key' key_num = 1 #Array de chaves criadas keys = [] #Processo para encontrar a formula mais interna str_proposition = str_proposition.replace(' ) ', ' ( ').replace(' )', ' ( ') propositions = str_proposition.split(' ( ') propositions = filter(None, propositions) #Eliminando todos os implicas while ' ->' in " ".join(propositions): #Variavel auxilar utiliza na varredura do array de proposições count = 1 #Removendo espaços em branco do array propositions = filter(None, propositions) #Inciando varredura do array for proposition in propositions: #Transformando a string em array separado por espaço em branco e removendo vazios do array array = proposition.split(' ') array = filter(None, array) #Verificando se a proposição interna é valida if validation_premisse(array): #Verificando se a formule tem implica if '->' in array: #Separando as proposições em componentes components = proposition.split(' -> ') #Quantidade de componentes size = len(components) #Verificando se a operação implica possui mais de 2 componentes if size > 2: components = [components[0], components[size - 1]] #Verficando se os componentes são chaves do dicionário if components[0] in key_name: #Recuperando componente/formula p1 = dict.get(components[0]) else: #Seperando o primeiro componente em um array p1 = components[0].split(' ') if components[1] in keys: #Recuperando componente/formula p2 = dict.get(components[1]) else: #Seperando o segundo componente em um array p2 = components[1].split(' ') #Eliminando implica por sua equivalência formule = elimination_then(p1, p2) #Verificando se é a primeira formula das proposições if count > 1: #Apos a resolução atualizamos a formula anterior com a formula sem implica key_name = 'key' + str( key_num) #Criando uma nova chave keys.append(key_name) dict[ key_name] = formule #Adicionando chave e formula (Valor) no dicionário #Variavel auxilar para armazenar o valor da formula anterior aux = propositions[count - 2] #Atualizando o valor da formula anterior acrescentando o valor da formula sem implica propositions[count - 2] = aux + ' ' + key_name #Removendo formula solucionada propositions.remove(proposition) #Atualizando variavel para criação de chaves key_num += 1 else: #Caso seja a primeira formula do array, apenas atualizamos o seu valor propositions = formule else: print 'invalida' #Contador para saber a posição do array count += 1 #Após aplicar as regras de equivalência referente ao implicar vamos sincronizar com a formula final. propositions = syncFormule(propositions, dict) return propositions