Permutar Fundamentos da Programação Lógica e Funcional: o princípio de resolução e a teoria de reescrita