(use mini-kanren) (define distinct (lambda ( x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25) (let ([xs (list x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25) ]) (all (membero 1 xs) (membero 2 xs) (membero 3 xs) (membero 4 xs) (membero 5 xs) (membero 6 xs) (membero 7 xs) (membero 8 xs) (membero 9 xs) (membero 10 xs) (membero 11 xs) (membero 12 xs) (membero 13 xs) (membero 14 xs) (membero 15 xs) (membero 16 xs) (membero 17 xs) (membero 18 xs) (membero 19 xs) (membero 20 xs) (membero 21 xs) (membero 22 xs) (membero 23 xs) (membero 24 xs) (membero 25 xs))))) (define sumo (lambda (x1 x2 x3 x4 x5) (fresh (s1 s2 s3 s4 s5) (+o x1 x2 s1) (+o x2 s1 s2) (+o x3 s2 s3) (+o x4 s3 s4) (+o x5 s4 (build-num 65))))) (run 2 (b) (fresh ( x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25) (alli ; the board consists of fields fields (== b (list (list x1 x2 x3 x4 x5) (list x6 x7 x8 x9 x10) (list x11 x12 x13 x14 x15) (list x16 x17 x18 x19 x20) (list x21 x22 x23 x24 x25))) (distinct x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25) (sumo x1 x2 x3 x4 x5) (sumo x6 x7 x8 x9 x10) (sumo x11 x12 x13 x14 x15) (sumo x16 x17 x18 x19 x20) (sumo x21 x22 x23 x24 x25) (sumo x1 x6 x11 x16 x21) (sumo x2 x7 x12 x17 x22) (sumo x3 x8 x13 x18 x23) (sumo x4 x9 x14 x19 x24) (sumo x5 x10 x15 x20 x25))))