[Haskell-cafe] Propositional logic implementation

Ryan Ingram ryani.spam at gmail.com
Sat Jan 10 22:08:24 EST 2009


I like using smart constructors to replace :<=>: and :=>:

a \/ b = a :\/: b
a /\ b = a :/\: b
a ==> b = Not a \/ b
a <=> b = (a ==> b) /\ (b ==> a)

Also, if you generalize Sentence a bit you get a really nice
formulation of "true".  See my paste at http://hpaste.org/13807#a2

  -- ryan

2009/1/10 Andrew Wagner <wagner.andrew at gmail.com>:
> Nice Idea, though I don't know that I want something that extensive. I was
> more looking for whether there was a better way I could define the algebraic
> data type.
>
> On Sat, Jan 10, 2009 at 6:04 PM, Miguel Mitrofanov <miguelimo38 at yandex.ru>
> wrote:
>>
>> Look at SYB (Data.Data, Data.Generics.*). For example, your "symbols"
>> function can be rewritten as
>>
>> symbols :: Sentence -> [Symbol]
>> symbols s = nub $ listify (const True) s
>>
>> "true" is not that simple, because this code is NOT boilerplate - each
>> alternative is valuable by itself.
>>
>> On 10 Jan 2009, at 23:56, Andrew Wagner wrote:
>>
>>> All,
>>> Is there some better way to do this? It seems like a lot of boilerplate.
>>> Thanks!
>>>
>>> http://hpaste.org/13807#a1
>>> _______________________________________________
>>> Haskell-Cafe mailing list
>>> Haskell-Cafe at haskell.org
>>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>>
>
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>


More information about the Haskell-Cafe mailing list