Beispiel #1
0
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
Beispiel #5
0
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
Beispiel #6
0
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