Eu tenho a seguinte teoria digitada
|- 1_X : X -> X
f : A -> B, g : B -> C |- compose(g,f) : A -> C
F, f : A -> B |- apply(F,f) : F(A) -> F(B)
com equações para todos os termos:
f : A -> B, g : B -> C, h : C -> D |- compose(h,compose(f,g)) = compose(compose(h,f),g)
f : A -> B |- compose(f,1_A) = f
f : A -> B |- compose(1_B,f) = f
F |- apply(F,1_X) = 1_F(X)
f, f : A -> B, g : B -> C |- apply(F,compose(g,f)) = compose(apply(F,g),apply(F,f))
Estou procurando um procedimento de semi-decisão que possa provar equações nesta teoria, dado um conjunto de equações hipotéticas. Também não está claro se existe ou não um procedimento de decisão completo: não parece haver nenhuma maneira de codificar a palavra problema para os grupos. Neel Krishnaswami mostrou como codificar a palavra problema para isso, então o problema geral é indecidível. A subteoria da associatividade e da identidade pode ser facilmente decidida usando um modelo monóide da teoria, enquanto o problema completo é mais difícil do que o fechamento da congruência. Quaisquer referências ou sugestões serão bem-vindas!
Aqui está um exemplo explícito de algo que esperamos poder provar automaticamente:
f : X -> Y, F, G,
a : F(X) -> G(X), b : G(X) -> F(X),
c : F(Y) -> G(Y), d : G(Y) -> F(Y),
compose(a,b) = 1_F(X), compose(b,a) = 1_G(X),
compose(c,d) = 1_F(Y), compose(d,c) = 1_G(Y),
compose(c,apply(F,f)) = compose(apply(G,f),a)
|- compose(d,apply(G,f)) = compose(apply(F,f),b)