Antes de abordar as questões reais, um comentário sobre seu trabalho até agora: o cancelamento à esquerda em 2.a. não está correto em geral, o par crítico seria apenas . Conseqüentemente, você não recebe o par crítico 2.b. O problema com esse cancelamento é que a equação que você obtém geralmente não segue os axiomas de onde você começou; por exemplo, se você estiver trabalhando no idioma dos anéis, poderá em algum momento derivar o par crítico , mas seria incorreto deduzir (o que significa que você só tem um modelo trivial). Nenhum procedimento de reescrita de som, incluindo o de Huet, deve permitir essa redução.x∘(e∘z)≈x∘z0∗x≈0∗yx≈y
Por outro lado, você está perdendo os pares críticos que obtém ao unificar (versões com renomeação de variáveis) ou com todos (ou seja, usando o segundo ). Os pares críticos resultantes sãox∘ex∘i(x)(x∘y)∘z∘
- x∘(y∘e)←(x∘y)∘e→x∘y , que após a redução se torna a equação trivial , ex∘y≈x∘y
- x∘(y∘i(x∘y))←(x∘y)∘i(x∘y)→e , que não pode ser reduzido ainda mais e fornece a regra (assumindo que na precedência usava para definir o LPO, assim como você fez ao orientar ).x∘(y∘i(x∘y))→e∘▹e▹x∘i(x)≈e
Para o procedimento básico de conclusão:
- Sempre que você cria um par crítico, reduz os dois lados o máximo possível usando o conjunto de regras atual. Se os formulários normais resultantes não forem iguais, você cria uma nova regra. Por exemplo, seu 2.c. fornece uma nova regra . Por outro lado, unificar com fornece o par crítico , que pode ser reduzido ao trivial e descartado.x∘(i(x)∘z)→e∘z(x∘y)∘zx1∘y1(x∘y)∘(z∘z1)←((x∘y)∘z)∘z1→(x∘(y∘z))∘z1x∘(y∘(z∘z1))≈x∘(y∘(z∘z1))
- Sempre que você cria uma nova regra , deve considerar todos os pares críticos entre ela e as regras existentes , verificando a uniformidade de com cada subtermo não variável de e vice-versa. Lembre-se também de verificar sobreposições automáticas, ou seja, unibilidade de com seus próprios subtermos, como fizemos acima para associatividade. Você para somente quando todos os pares críticos das regras existentes foram examinados e produziram novas regras ou foram descartados.l→rl1→r1,…,ln→rnllil
Este procedimento pode ser melhorado bastante. Em particular, você pode usar novas regras para simplificar as antigas (e possivelmente descartá-las se elas se tornarem triviais, o que significa que estão incluídas na nova regra), e uma boa heurística para escolher o próximo par crítico a examinar pode reduzir drasticamente quantidade de regras.