{
  "name": "nd",
  "word": "variable",
  "rules": {
    "proof": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "block"
        },
        {
          "type": "BLANK"
        }
      ]
    },
    "block": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "REPEAT",
            "content": {
              "type": "SYMBOL",
              "name": "guard"
            }
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "hypothesis"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_hypothesis_end"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "REPEAT1",
            "content": {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "expression"
                    },
                    {
                      "type": "STRING",
                      "value": "\n"
                    }
                  ]
                },
                {
                  "type": "SYMBOL",
                  "name": "_nested_block"
                },
                {
                  "type": "SYMBOL",
                  "name": "expression"
                }
              ]
            }
          }
        ]
      }
    },
    "guard": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_vars"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "]"
        }
      ]
    },
    "annotation": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "@"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "PATTERN",
                "value": "[^<#\\n]+"
              },
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "<"
                  },
                  {
                    "type": "PATTERN",
                    "value": "[^>]*"
                  },
                  {
                    "type": "STRING",
                    "value": ">"
                  }
                ]
              }
            ]
          }
        }
      ]
    },
    "_vars": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "variable"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": ","
              },
              {
                "type": "SYMBOL",
                "name": "variable"
              }
            ]
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": ","
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "hypothesis": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "expression"
                },
                {
                  "type": "REPEAT1",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ",\n"
                      },
                      {
                        "type": "SYMBOL",
                        "name": "expression"
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "SYMBOL",
              "name": "expression"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": ","
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "\n"
        },
        {
          "type": "SYMBOL",
          "name": "_hypothesis_end"
        }
      ]
    },
    "_hypothesis_end": {
      "type": "TOKEN",
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "___"
          },
          {
            "type": "REPEAT",
            "content": {
              "type": "STRING",
              "value": "_"
            }
          }
        ]
      }
    },
    "comment": {
      "type": "TOKEN",
      "content": {
        "type": "PREC",
        "value": 0,
        "content": {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "#"
                },
                {
                  "type": "PATTERN",
                  "value": ".*"
                }
              ]
            },
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "/*"
                },
                {
                  "type": "PATTERN",
                  "value": "[^*]*\\*+([^\\/*][^*]*\\*+)*"
                },
                {
                  "type": "STRING",
                  "value": "/"
                }
              ]
            }
          ]
        }
      }
    },
    "_nested_block": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "SYMBOL",
          "name": "block"
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_term"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "annotation"
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "_term": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "variable"
        },
        {
          "type": "SYMBOL",
          "name": "function"
        },
        {
          "type": "SYMBOL",
          "name": "true"
        },
        {
          "type": "SYMBOL",
          "name": "false"
        },
        {
          "type": "SYMBOL",
          "name": "not"
        },
        {
          "type": "SYMBOL",
          "name": "and"
        },
        {
          "type": "SYMBOL",
          "name": "or"
        },
        {
          "type": "SYMBOL",
          "name": "implies"
        },
        {
          "type": "SYMBOL",
          "name": "iff"
        },
        {
          "type": "SYMBOL",
          "name": "forall"
        },
        {
          "type": "SYMBOL",
          "name": "exists"
        },
        {
          "type": "SYMBOL",
          "name": "_group"
        },
        {
          "type": "SYMBOL",
          "name": "_universal_group"
        }
      ]
    },
    "function": {
      "type": "PREC_RIGHT",
      "value": 8,
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "function_name"
              },
              {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": "("
                      },
                      {
                        "type": "SYMBOL",
                        "name": "_term"
                      },
                      {
                        "type": "STRING",
                        "value": ")"
                      }
                    ]
                  },
                  {
                    "type": "BLANK"
                  }
                ]
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "ALIAS",
                "content": {
                  "type": "SYMBOL",
                  "name": "_TF_func_name"
                },
                "named": true,
                "value": "function_name"
              },
              {
                "type": "STRING",
                "value": "("
              },
              {
                "type": "SYMBOL",
                "name": "_term"
              },
              {
                "type": "STRING",
                "value": ")"
              }
            ]
          }
        ]
      }
    },
    "not": {
      "type": "PREC_RIGHT",
      "value": 7,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_not_sym"
          },
          {
            "type": "SYMBOL",
            "name": "_term"
          }
        ]
      }
    },
    "and": {
      "type": "PREC_LEFT",
      "value": 5,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_term"
          },
          {
            "type": "SYMBOL",
            "name": "_and_sym"
          },
          {
            "type": "SYMBOL",
            "name": "_term"
          }
        ]
      }
    },
    "or": {
      "type": "PREC_LEFT",
      "value": 4,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_term"
          },
          {
            "type": "SYMBOL",
            "name": "_or_sym"
          },
          {
            "type": "SYMBOL",
            "name": "_term"
          }
        ]
      }
    },
    "implies": {
      "type": "PREC_RIGHT",
      "value": 3,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_term"
          },
          {
            "type": "SYMBOL",
            "name": "_implies_sym"
          },
          {
            "type": "SYMBOL",
            "name": "_term"
          }
        ]
      }
    },
    "iff": {
      "type": "PREC_RIGHT",
      "value": 2,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_term"
          },
          {
            "type": "SYMBOL",
            "name": "_iff_sym"
          },
          {
            "type": "SYMBOL",
            "name": "_term"
          }
        ]
      }
    },
    "forall": {
      "type": "PREC_LEFT",
      "value": 6,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_forall_sym"
          },
          {
            "type": "SYMBOL",
            "name": "variable"
          },
          {
            "type": "SYMBOL",
            "name": "_term"
          }
        ]
      }
    },
    "exists": {
      "type": "PREC_LEFT",
      "value": 6,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_exists_sym"
          },
          {
            "type": "SYMBOL",
            "name": "variable"
          },
          {
            "type": "SYMBOL",
            "name": "_term"
          }
        ]
      }
    },
    "_group": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SYMBOL",
          "name": "_term"
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "_universal_group": {
      "type": "PREC_RIGHT",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "."
          },
          {
            "type": "SYMBOL",
            "name": "_term"
          }
        ]
      }
    },
    "variable": {
      "type": "TOKEN",
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "PATTERN",
            "value": "[a-uw-z]"
          },
          {
            "type": "PATTERN",
            "value": "[a-z]\\w*"
          }
        ]
      }
    },
    "function_name": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_function_name"
        },
        {
          "type": "SYMBOL",
          "name": "_reserved_function_name"
        }
      ]
    },
    "_function_name": {
      "type": "TOKEN",
      "content": {
        "type": "PATTERN",
        "value": "[A-Z]\\w*"
      }
    },
    "_reserved_function_name": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "A"
        },
        {
          "type": "STRING",
          "value": "E"
        }
      ]
    },
    "_TF_func_name": {
      "type": "PREC_DYNAMIC",
      "value": 12,
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "STRING",
            "value": "T"
          },
          {
            "type": "STRING",
            "value": "F"
          }
        ]
      }
    },
    "true": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "T"
        },
        {
          "type": "STRING",
          "value": "1"
        },
        {
          "type": "STRING",
          "value": "⊤"
        }
      ]
    },
    "false": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "F"
        },
        {
          "type": "STRING",
          "value": "0"
        },
        {
          "type": "STRING",
          "value": "⊥"
        }
      ]
    },
    "_not_sym": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "STRING",
          "value": "!"
        },
        {
          "type": "STRING",
          "value": "~"
        },
        {
          "type": "STRING",
          "value": "¬"
        }
      ]
    },
    "_and_sym": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "^"
        },
        {
          "type": "STRING",
          "value": "&"
        },
        {
          "type": "STRING",
          "value": "∧"
        }
      ]
    },
    "_or_sym": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "_"
        },
        {
          "type": "STRING",
          "value": "|"
        },
        {
          "type": "STRING",
          "value": "v"
        },
        {
          "type": "STRING",
          "value": "∨"
        }
      ]
    },
    "_implies_sym": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "->"
        },
        {
          "type": "STRING",
          "value": "=>"
        },
        {
          "type": "STRING",
          "value": "→"
        },
        {
          "type": "STRING",
          "value": "⇒"
        }
      ]
    },
    "_iff_sym": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "<->"
        },
        {
          "type": "STRING",
          "value": "<=>"
        },
        {
          "type": "STRING",
          "value": "↔"
        },
        {
          "type": "STRING",
          "value": "⇔"
        },
        {
          "type": "STRING",
          "value": "≡"
        }
      ]
    },
    "_forall_sym": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "A"
        },
        {
          "type": "STRING",
          "value": "∀"
        }
      ]
    },
    "_exists_sym": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "E"
        },
        {
          "type": "STRING",
          "value": "∃"
        }
      ]
    },
    "_universal_sep": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "."
        },
        {
          "type": "STRING",
          "value": "$"
        }
      ]
    }
  },
  "extras": [
    {
      "type": "SYMBOL",
      "name": "comment"
    },
    {
      "type": "PATTERN",
      "value": "\\s"
    }
  ],
  "conflicts": [
    [
      "function_name",
      "_forall_sym"
    ],
    [
      "function_name",
      "_exists_sym"
    ],
    [
      "_TF_func_name",
      "true"
    ],
    [
      "_TF_func_name",
      "false"
    ],
    [
      "hypothesis",
      "block"
    ]
  ],
  "externals": [],
  "inline": [
    "_reserved_function_name"
  ]
}