summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Benjamin Barenblat <benjamin@barenblat.name>2017-08-17 13:57:50 -0400
committerGravatar GitHub <noreply@github.com>2017-08-17 13:57:50 -0400
commit31c1cf935f5c0ef7423266d0d1a7c9e0421312a8 (patch)
tree4594cf83ae5da5cbdc48cbaafbe3b29514f60a6c
-rw-r--r--fish_riddle.smt264
1 files changed, 64 insertions, 0 deletions
diff --git a/fish_riddle.smt2 b/fish_riddle.smt2
new file mode 100644
index 0000000..e3f4a2f
--- /dev/null
+++ b/fish_riddle.smt2
@@ -0,0 +1,64 @@
+; Copyright 2017 Google Inc.
+;
+; Licensed under the Apache License, Version 2.0 (the "License");
+; you may not use this file except in compliance with the License.
+; You may obtain a copy of the License at
+;
+; https://www.apache.org/licenses/LICENSE-2.0
+;
+; Unless required by applicable law or agreed to in writing, software
+; distributed under the License is distributed on an "AS IS" BASIS,
+; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; See the License for the specific language governing permissions and
+; limitations under the License.
+
+; This is a SMT-LIB solution to
+; https://ed.ted.com/lessons/can-you-solve-the-fish-riddle-steve-wyborney.
+
+; There are fish tanks and sharks.
+(declare-const tanks-a Int)
+(declare-const tanks-b Int)
+(declare-const tanks-c Int)
+(declare-const sharks-a Int)
+(declare-const sharks-b Int)
+(declare-const sharks-c Int)
+(assert (>= tanks-a 0))
+(assert (>= tanks-b 0))
+(assert (>= tanks-c 0))
+(assert (>= sharks-a 0))
+(assert (>= sharks-b 0))
+(assert (>= sharks-c 0))
+
+; There are fish in the tanks.
+(declare-const fish-per-tank Int)
+(assert (>= fish-per-tank 0))
+
+(define-fun tanks () Int (+ tanks-a tanks-b tanks-c))
+(define-fun fish () Int (* fish-per-tank tanks))
+(define-fun sharks () Int (+ sharks-a sharks-b sharks-c))
+(define-fun total-creatures () Int (+ fish sharks))
+
+; There are 50 creatures total.
+(assert (= total-creatures 50))
+
+; Each sector has between 1 and 7 sharks.
+(assert (<= 1 sharks-a 7))
+(assert (<= 1 sharks-b 7))
+(assert (<= 1 sharks-c 7))
+
+; No two sectors have the same number of sharks.
+(assert (not (= sharks-a sharks-b)))
+(assert (not (= sharks-b sharks-c)))
+(assert (not (= sharks-a sharks-c)))
+
+; There are 13 or fewer tanks.
+(assert (<= tanks 13))
+
+; We know some stuff about sectors alpha and beta.
+(assert (= sharks-a 2))
+(assert (= tanks-a 4))
+(assert (= sharks-b 4))
+(assert (= tanks-b 2))
+
+(check-sat)
+(get-model) \ No newline at end of file