[Haskell-cafe] looking for examples of non-full Functional Dependencies

Tom Schrijvers Tom.Schrijvers at cs.kuleuven.be
Fri Apr 25 08:20:55 EDT 2008


On Fri, 25 Apr 2008, Hans Aberg wrote:

> On 18 Apr 2008, at 20:04, Martin Sulzmann wrote:
>
>> Let's consider our running example
>> 
>> class D a b | a -> b
>> instance D a b => D [a] [b]
>> 
>> which we can write in CHR notation
>> 
>> D a b, D a c ==> b=c    (FD)
>> 
>> D [a] [b] <=> D a b       (Inst)
>> 
>> These rules overlap.
>
> I experimented with translations into GNU Prolog (gprolog). Since "=" is hard 
> to get working in Prolog unless integrated into unification, I tried (using 
> the idea of rewriting unique existence as functions, possible if one assumes 
> the axiom of choice):
> class(d, A, b(A)).
> instance(d, l(A), l(B)) :- class(d, A, B).
> Then:
> ?- instance(d, l(A), l(B)).
> B = b(A)
>
> ?- instance(d, l(A), C).
> C = l(b(A))
>
> ?- instance(d, l(A), l(B)), instance(d, l(A), C).
> B = b(A)
> C = l(b(A))
> Though I am not sure about the intended semantics, it does produce unique 
> solutions.

Prolog works under the assumption of a closed world. That's contrary to 
the open world view of regular type classes. So these aren't the intended 
semantics.

Tom

--
Tom Schrijvers

Department of Computer Science
K.U. Leuven
Celestijnenlaan 200A
B-3001 Heverlee
Belgium

tel: +32 16 327544
e-mail: tom.schrijvers at cs.kuleuven.be
url: http://www.cs.kuleuven.be/~toms/


More information about the Haskell-Cafe mailing list