Sale!

 CH-232 Problem Sheet #6 Solution

$30.00

Category:

Description

5/5 - (5 votes)

Problem 6.1: long life diet rules (1+3+1+3 = 8 points)
Uwe Schonig published in his book “Logic for Computer Scientists” the following little story: ¨
A 100 year old was asked “What is the secret of having a long life?” and he did respond
to stick to three diet rules:
1. If you don’t take beer, you must have fish.
2. If you have both beer and fish, don’t have ice cream.
3. If you have ice cream or don’t have beer, then don’t have fish.
The questioner found this answer quite confusing. Can you help to simplify the answer?
We introduce three boolean variables: The variable B is true if we have beer, the variable F is true
if we have fish, and the variable I is true if we have ice cream.
a) Provide a boolean formula for the function D(B, F, I) that captures the three rules.
b) Construct a truth table that shows all interpretations of D(B, F, I). Break things into meaningful
steps so that we can award partial points in case things go wrong somewhere.
c) Out of the truth table, derive a simpler boolean formula defining D(B, F, I).
d) Take the boolean formula from a) and algebraically derive the simpler boolean formula from c).
Annotate each step of your derivation with the equivalence law that you apply so that we can
follow along.
Problem 6.2: long life diet rules (1+1 = 2 points)
Uwe Schonig published in his book “Logic for Computer Scientists” the following little story: ¨
A 100 year old was asked “What is the secret of having a long life?” and he did respond
to stick to three diet rules:
1. If you don’t take beer, you must have fish.
2. If you have both beer and fish, don’t have ice cream.
3. If you have ice cream or don’t have beer, then don’t have fish.
The questioner found this answer quite confusing. Can you help to simplify the answer?
We introduce three boolean variables: The variable B is true if we have beer, the variable F is true
if we have fish, and the variable I is true if we have ice cream.
a) Define a function
diet :: Bool -> Bool -> Bool -> Bool
that implements the three diet rules directly following the description given above and a function
diet’ :: Bool -> Bool -> Bool -> Bool
that implements a simplified diet formula.
b) Define a function
truthTable :: (Bool -> Bool -> Bool -> Bool) -> [(Bool, Bool, Bool, Bool)]
takes a (diet) function as an argument and returns a list where each element is a 4-tuple
representing three input values passed to the (diet) function followed by the function’s result.
Submit your Haskell code as a plain text file.
Below is a unit test template that you can use to fill in your code.
1 module Main (main) where
2
3 import Test.HUnit
4
5 — The function diet implements the three diet rules directly.
6 diet :: Bool -> Bool -> Bool -> Bool
7 diet b f i = undefined
8
9 — The function diet’ implements the simplified diet formula.
10 diet’ :: Bool -> Bool -> Bool -> Bool
11 diet’ b f i = undefined
12
13 — The function truthTable takes a function as an argument and returns
14 — a list where each element is a 4-tuple representing three input
15 — value passed to the function followed by the function’s result.
16 truthTable :: (Bool -> Bool -> Bool -> Bool) -> [(Bool, Bool, Bool, Bool)]
17 truthTable f = undefined
18
19 — Test whether the two truth tables returned are the same (which is
20 — not a very sharp test but I do not want to reveal too many details).
21 — You may want to add your own test cases…
22 dietTests = TestList [ truthTable diet ~?= truthTable diet’ ]
23
24 main = runTestTT dietTests