Ho la seguente teoria tipizzata
|- 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)
con equazioni per tutti i termini:
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))
Sto cercando una procedura semi-decisionale che sarà in grado di provare equazioni in questa teoria, dato un insieme di equazioni ipotetiche. Inoltre, non è chiaro se esista o meno una procedura decisionale completa: non sembra esserci alcun modo per codificare la parola problema per gruppi in essa. Neel Krishnaswami ha mostrato come codificare la parola problema in questo, quindi il problema generale è indecidibile. La teoria secondaria di associatività e identità può essere facilmente decisa usando un modello monoidale della teoria, mentre l'intero problema è più difficile della chiusura della congruenza. Eventuali riferimenti o suggerimenti sarebbero i benvenuti!
Ecco un esempio esplicito di qualcosa che speriamo di poter provare 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)