A unificação é um conceito tão fundamental na ciência da computação que talvez às vezes até tomemos como garantido. Sempre que temos uma regra ou equação ou padrão e queremos aplicá-lo a alguns dados, a unificação é usada para especializar a regra nos dados. Ou, se queremos combinar duas regras gerais, mas que se sobrepõem, a unificação nos fornece a regra combinada mais geral. A unificação está no cerne da
Os provadores de teoremas e assistentes de provas incluem alguns baseados na unificação de ordem superior.
Implementações de prólogo (como Resolução).
Digite algoritmos de inferência.
Linguística computacional / processamento de linguagem natural.
Sistemas de reescrita de termos como Maude, que podem ser usados como base da semântica da linguagem de programação.
Bancos de dados dedutivos.
Sistemas especialistas ou mais geralmente Inteligência artificial.
Sistemas de álgebra computacional.
Correspondência de padrões em linguagens funcionais (pelo menos em parte ... apenas correspondência).
Algumas abordagens de análise.
Algumas linguagens de consulta, especialmente envolvendo a Web Semântica.
Assistentes de prova como Isabelle / HOL trabalham em um nível sintático em um cálculo lógico. Imagine que você tem a regra do modus ponens (MP)
P→Q,P⟹Q
e o objetivo da prova
(a∨b)→(c∧d),a∨b⟹!c∧d
Nós, humanos, vemos imediatamente que isso ocorre com o modus ponens, mas a máquina precisa corresponder à meta para governar sintaticamente (seja você apply rule mpou não apply simp), e é isso que a unificação faz. Os achados algoritmo com φ ( P ) = um ∨ b e φ ( Q ) = c ∧ d , instancia a regra e aplica-lo.φφ(P)=a∨bφ(Q)=c∧d
O lado bom dos métodos dos assistentes simpagora é que, se seu objetivo é
(a∨b)→(c∧d),a⟹!d
P∧Q⟹PP⟹P∨Q
Γ={φ1,…,φn}
Γ⟹ψ
significa o seguinte:
Γψ
Γ ⟹ ψ é a última etapa de uma (longa) prova de ψ. As provas não passam de cadeias de aplicativos de regras.
Observe que as regras geralmente contêm variáveis esquemáticas (P e Qna acima) que pode ser substituído por arbitrárias fórmulas desde que a mesma variável é substituída com a mesma fórmula em todas as ocorrências; o resultado desse formato é a instância de regra concreta (ou intuitivamente, uma etapa de prova). Esta substituição é acima indicada porφ que foi encontrado pela unificação.
⊨ é freqüentemente usado para semântica, enquanto essa é uma manipulação sintática, para a qual ⊢é geralmente usado. Pode depender da comunidade, no entanto.
30512 Dave Clarke
2
Eu não acho que seja importante para os mecanismos de inferência . O algoritmo de unificação é, no entanto, muito útil para inferência de tipo . Esses são dois tipos muito diferentes de inferência.
A inferência de tipos é importante para a ciência da computação, porque os tipos são importantes na teoria das linguagens de programação, que é uma parte significativa da ciência da computação. Os tipos também estão próximos da lógica e são intensivamente usados na prova automatizada de teoremas. Existem implementações de algoritmos de unificação em muitos, se não em todos, assistentes de provas e solucionadores de SMT.
Os mecanismos de inferência estão relacionados à inteligência artificial, que também é importante, mas muito diferente. (Vi links entre aprendizado e lógica, mas isso parece buscado.)
Não acho que a primeira frase seja válida; veja minha resposta.
Raphael
11
Também não concordo com a primeira frase. A resolução (uma especialização da unificação) é o núcleo do Prolog, que é uma das linguagens de implementação mais comuns para sistemas especialistas e outros mecanismos de inferência.
Dave Clarke
@ Rafael e Dave: então você diz que o algoritmo de unificação é usado diretamente nos mecanismos de inferência?
Jmad
@ jmad: Não tenho certeza de que exista o algoritmo de unificação, e também não tenho certeza de que tipo de sistema é chamado de "mecanismo de inferência". Eu sei que a unificação é amplamente usada sempre que surgem lógicas e / ou semânticas formais; veja a resposta de Dave para uma lista.
Raphael
@ Rafael: essa é praticamente a questão que eu queria abordar: parece que os mecanismos de inferência não são sobre a inferência que eu sei sobre tipo e lógica.
Eu não acho que seja importante para os mecanismos de inferência . O algoritmo de unificação é, no entanto, muito útil para inferência de tipo . Esses são dois tipos muito diferentes de inferência.
A inferência de tipos é importante para a ciência da computação, porque os tipos são importantes na teoria das linguagens de programação, que é uma parte significativa da ciência da computação. Os tipos também estão próximos da lógica e são intensivamente usados na prova automatizada de teoremas. Existem implementações de algoritmos de unificação em muitos, se não em todos, assistentes de provas e solucionadores de SMT.
Os mecanismos de inferência estão relacionados à inteligência artificial, que também é importante, mas muito diferente. (Vi links entre aprendizado e lógica, mas isso parece buscado.)
fonte