Alexandru's Birthday Puzzle

Malvin Gattinger
Sat, 15 Jan 2022 00:00:00 UT

Malvin: What a great idea to have a workshop on the birthday of Alexandru. But I must confess that I do not know how old he gets.

Hans: I also do not know.

Sonja: Of course I know. But instead of just telling you his age, let me give you a puzzle. In fact, on the day of the workshop Alexandru will have an age that is a product of two prime numbers.

Malvin: Oh, nice, an age that can be used for Cryptography!

Hans: But probably the numbers are too low - I guess he must be between 40 and 90?

Sonja: Correct. Let me now tell each of you one of the prime numbers. Malvin will get a prime number between 1 and 10, and Hans will get a prime number between 10 and 20.

[ Sonja secretly tells Malvin and Hans a number. ]

Hans: I do not know the age and I do not know whether you know it.

Malvin: Aha! I did not know it before, but now I know it!

Hans: Oh, good, now I also know it!

Sonja: Great, and because all our readers are perfect logicians, they will also know it now.

Malvin and Hans: Happy Birthday Alexandru!

Written for the occasion of Alexandru Baltag’s birthday workshop. For information about the workshop and many other birthday wishes, see https://tinyurl.com/thebaltagworkshop (spoiler alert!).

The puzzle above can be solved using SMCDEL as follows.

-- Alexandru's Birthday Puzzle in SMCDEL

VARS 2,3,5,7,     -- first prime
     11,13,17,19  -- second prime

LAW  AND (
  -- exactly one of each list must be true:
  ONEOF (2, 3, 5, 7),
  ONEOF (11, 13, 17, 19),
  -- manually exclude products below 40 and above 90:
  ~2,
  (3 -> (~11 & ~13)),
  (5 -> ~19),
  (7 -> ~13 & ~17 & ~19)
  )

OBS  hans:   11, 13, 17, 19
     malvin: 2, 3, 5, 7

-- list all states
WHERE?
  Top

-- list all states where the dialogue is true
WHERE?
  -- Hans: I do not know the age:
  ~ (AND ( hans knows whether 2, hans knows whether 3, hans knows whether 5) )
  &
  -- ... and I do not know whether you know it:
  ~ (hans knows whether AND (malvin knows whether 11, malvin knows whether 13, malvin knows whether 17))
  &
  -- Malvin: Aha! I did not know it before ...
  ~ AND (malvin knows whether 11, malvin knows whether 13, malvin knows whether 17)
  &
  -- ... but now I know it!
  < ! ~ (AND (hans knows whether 2, hans knows whether 3, hans knows whether 5) )
      & ~ (hans knows whether (AND ( malvin knows whether 11, malvin knows whether 13, malvin knows whether 17 )))
  >
    (AND ( malvin knows whether 11, malvin knows whether 13, malvin knows whether 17))