{
  "definition": {
    "islanders": [
      "A",
      "B"
    ],
    "kinds": "knight (every statement true) or knave (every statement false); no third kind",
    "statements": "one statement per speaker, only about which of A and B are knights; 16 possible statements",
    "assignment_order": [
      "A knight, B knight",
      "A knight, B knave",
      "A knave, B knight",
      "A knave, B knave"
    ]
  },
  "statements": [
    {
      "text": "A is a knight.",
      "true_under": [
        "A knight, B knight",
        "A knight, B knave"
      ]
    },
    {
      "text": "A is a knave.",
      "true_under": [
        "A knave, B knight",
        "A knave, B knave"
      ]
    },
    {
      "text": "B is a knight.",
      "true_under": [
        "A knight, B knight",
        "A knave, B knight"
      ]
    },
    {
      "text": "B is a knave.",
      "true_under": [
        "A knight, B knave",
        "A knave, B knave"
      ]
    },
    {
      "text": "A and B are both knights.",
      "true_under": [
        "A knight, B knight"
      ]
    },
    {
      "text": "A and B are both knaves.",
      "true_under": [
        "A knave, B knave"
      ]
    },
    {
      "text": "At least one of A and B is a knight.",
      "true_under": [
        "A knight, B knight",
        "A knight, B knave",
        "A knave, B knight"
      ]
    },
    {
      "text": "At least one of A and B is a knave.",
      "true_under": [
        "A knight, B knave",
        "A knave, B knight",
        "A knave, B knave"
      ]
    },
    {
      "text": "A and B are the same kind.",
      "true_under": [
        "A knight, B knight",
        "A knave, B knave"
      ]
    },
    {
      "text": "A and B are different kinds.",
      "true_under": [
        "A knight, B knave",
        "A knave, B knight"
      ]
    },
    {
      "text": "A is a knight and B is a knave.",
      "true_under": [
        "A knight, B knave"
      ]
    },
    {
      "text": "A is a knave and B is a knight.",
      "true_under": [
        "A knave, B knight"
      ]
    },
    {
      "text": "A is a knight or B is a knave.",
      "true_under": [
        "A knight, B knight",
        "A knight, B knave",
        "A knave, B knave"
      ]
    },
    {
      "text": "A is a knave or B is a knight.",
      "true_under": [
        "A knight, B knight",
        "A knave, B knight",
        "A knave, B knave"
      ]
    },
    {
      "text": "A is a knight or a knave.",
      "true_under": [
        "A knight, B knight",
        "A knight, B knave",
        "A knave, B knight",
        "A knave, B knave"
      ]
    },
    {
      "text": "A is both a knight and a knave.",
      "true_under": []
    }
  ],
  "two_speaker": {
    "puzzles": 256,
    "checks": 1024,
    "by_number_of_solutions": {
      "0": 81,
      "1": 108,
      "2": 54,
      "3": 12,
      "4": 1
    },
    "no_solution_reasons": {
      "A calls itself a knave": 15,
      "B calls itself a knave": 15,
      "both speakers call themselves knaves": 1,
      "each statement is possible alone, but no assignment fits both": 50
    },
    "four_solutions": {
      "statement_a": "A says: A is a knight.",
      "statement_b": "B says: B is a knight."
    },
    "pattern": "each of the 4 assignments fits a random pair of statements with chance 1/4, independently: counts 256 x C(4,k) x (1/4)^k x (3/4)^(4-k) = 81, 108, 54, 12, 1"
  },
  "one_speaker": {
    "puzzles": 16,
    "note": "A speaks, B says nothing",
    "by_number_of_solutions": {
      "0": 1,
      "1": 4,
      "2": 6,
      "3": 4,
      "4": 1
    },
    "rows": [
      {
        "statement_a": "A says: A is a knight.",
        "n_solutions": 4,
        "solutions": "A knight, B knight | A knight, B knave | A knave, B knight | A knave, B knave"
      },
      {
        "statement_a": "A says: A is a knave.",
        "n_solutions": 0,
        "solutions": "none"
      },
      {
        "statement_a": "A says: B is a knight.",
        "n_solutions": 2,
        "solutions": "A knight, B knight | A knave, B knave"
      },
      {
        "statement_a": "A says: B is a knave.",
        "n_solutions": 2,
        "solutions": "A knight, B knave | A knave, B knight"
      },
      {
        "statement_a": "A says: A and B are both knights.",
        "n_solutions": 3,
        "solutions": "A knight, B knight | A knave, B knight | A knave, B knave"
      },
      {
        "statement_a": "A says: A and B are both knaves.",
        "n_solutions": 1,
        "solutions": "A knave, B knight"
      },
      {
        "statement_a": "A says: At least one of A and B is a knight.",
        "n_solutions": 3,
        "solutions": "A knight, B knight | A knight, B knave | A knave, B knave"
      },
      {
        "statement_a": "A says: At least one of A and B is a knave.",
        "n_solutions": 1,
        "solutions": "A knight, B knave"
      },
      {
        "statement_a": "A says: A and B are the same kind.",
        "n_solutions": 2,
        "solutions": "A knight, B knight | A knave, B knight"
      },
      {
        "statement_a": "A says: A and B are different kinds.",
        "n_solutions": 2,
        "solutions": "A knight, B knave | A knave, B knave"
      },
      {
        "statement_a": "A says: A is a knight and B is a knave.",
        "n_solutions": 3,
        "solutions": "A knight, B knave | A knave, B knight | A knave, B knave"
      },
      {
        "statement_a": "A says: A is a knave and B is a knight.",
        "n_solutions": 1,
        "solutions": "A knave, B knave"
      },
      {
        "statement_a": "A says: A is a knight or B is a knave.",
        "n_solutions": 3,
        "solutions": "A knight, B knight | A knight, B knave | A knave, B knight"
      },
      {
        "statement_a": "A says: A is a knave or B is a knight.",
        "n_solutions": 1,
        "solutions": "A knight, B knight"
      },
      {
        "statement_a": "A says: A is a knight or a knave.",
        "n_solutions": 2,
        "solutions": "A knight, B knight | A knight, B knave"
      },
      {
        "statement_a": "A says: A is both a knight and a knave.",
        "n_solutions": 2,
        "solutions": "A knave, B knight | A knave, B knave"
      }
    ]
  },
  "featured": {
    "P1": "Every islander is a knight or a knave, never both.",
    "P2": "A knight's statements are true; a knave's statements are false.",
    "P3": "A says: \"At least one of us is a knave.\"",
    "P4": "B says nothing.",
    "statement_as_listed": "A says: At least one of A and B is a knave.",
    "table": [
      {
        "assignment": "A knight, B knight",
        "a_statement_true": false,
        "a_fits": false,
        "b_fits": true,
        "b_note": "B says nothing, so any type fits",
        "solves_puzzle": false
      },
      {
        "assignment": "A knight, B knave",
        "a_statement_true": true,
        "a_fits": true,
        "b_fits": true,
        "b_note": "B says nothing, so any type fits",
        "solves_puzzle": true
      },
      {
        "assignment": "A knave, B knight",
        "a_statement_true": true,
        "a_fits": false,
        "b_fits": true,
        "b_note": "B says nothing, so any type fits",
        "solves_puzzle": false
      },
      {
        "assignment": "A knave, B knave",
        "a_statement_true": true,
        "a_fits": false,
        "b_fits": true,
        "b_note": "B says nothing, so any type fits",
        "solves_puzzle": false
      }
    ],
    "solutions": [
      "A knight, B knave"
    ],
    "decoy": "A is a knave",
    "decoy_fails_because": "if A were a knave, the statement would be false, so both A and B would be knights, but A is a knave"
  },
  "example_no_answer": {
    "statement_a": "A says: B is a knight.",
    "statement_b": "B says: A is a knave.",
    "table": [
      {
        "assignment": "A knight, B knight",
        "a_statement_true": true,
        "a_fits": true,
        "b_statement_true": false,
        "b_fits": false,
        "solves_puzzle": false
      },
      {
        "assignment": "A knight, B knave",
        "a_statement_true": false,
        "a_fits": false,
        "b_statement_true": false,
        "b_fits": true,
        "solves_puzzle": false
      },
      {
        "assignment": "A knave, B knight",
        "a_statement_true": true,
        "a_fits": false,
        "b_statement_true": true,
        "b_fits": true,
        "solves_puzzle": false
      },
      {
        "assignment": "A knave, B knave",
        "a_statement_true": false,
        "a_fits": true,
        "b_statement_true": true,
        "b_fits": false,
        "solves_puzzle": false
      }
    ],
    "solutions": []
  },
  "example_two_answers": {
    "statement_a": "A says: B is a knave.",
    "statement_b": "B says: A is a knave.",
    "table": [
      {
        "assignment": "A knight, B knight",
        "a_statement_true": false,
        "a_fits": false,
        "b_statement_true": false,
        "b_fits": false,
        "solves_puzzle": false
      },
      {
        "assignment": "A knight, B knave",
        "a_statement_true": true,
        "a_fits": true,
        "b_statement_true": false,
        "b_fits": true,
        "solves_puzzle": true
      },
      {
        "assignment": "A knave, B knight",
        "a_statement_true": false,
        "a_fits": true,
        "b_statement_true": true,
        "b_fits": true,
        "solves_puzzle": true
      },
      {
        "assignment": "A knave, B knave",
        "a_statement_true": true,
        "a_fits": false,
        "b_statement_true": true,
        "b_fits": false,
        "solves_puzzle": false
      }
    ],
    "solutions": [
      "A knight, B knave",
      "A knave, B knight"
    ]
  }
}
