sbv-13.1: SMT Based Verification: Symbolic Haskell theorem prover using SMT solving.
Copyright(c) Levent Erkok
LicenseBSD3
Maintainererkokl@gmail.com
Stabilityexperimental
Safe HaskellNone
LanguageHaskell2010

Documentation.SBV.Examples.Puzzles.Drinker

Description

SBV proof of the drinker paradox: http://en.wikipedia.org/wiki/Drinker_paradox

Let P be the non-empty set of people in a bar. The theorem says if there is somebody drinking in the bar, then everybody is drinking in the bar. The general formulation is:

    ∃x : P. D(x) -> ∀y : P. D(y)
Synopsis

Documentation

data P Source #

Declare a carrier data-type in Haskell named P, representing all the people in a bar.

Instances

Instances details
Arbitrary P Source # 
Instance details

Defined in Documentation.SBV.Examples.Puzzles.Drinker

Methods

arbitrary :: Gen P #

shrink :: P -> [P] #

SymVal P Source # 
Instance details

Defined in Documentation.SBV.Examples.Puzzles.Drinker

HasKind P Source # 
Instance details

Defined in Documentation.SBV.Examples.Puzzles.Drinker

cv2P :: String -> [CV] -> P Source #

Conversion from SMT values to P values.

_undefiner_P :: a Source #

Autogenerated definition to avoid unused-variable warnings from GHC.

type SP = SBV P Source #

Symbolic version of the type P.

d :: SP -> SBool Source #

Declare the uninterpret function d, standing for drinking. For each person, this function assigns whether they are drinking; but is otherwise completely uninterpreted. (i.e., our theorem will be true for all such functions.)

drinker :: IO ThmResult Source #

Formulate the drinkers paradox, if some one is drinking, then everyone is!

>>> drinker
Q.E.D.