This PR adds configuration options for `decide`/`decide!`/`native_decide` and refactors the tactics to be frontends to the same backend. Adds a `+revert` option that cleans up the local context and reverts all local variables the goal depends on, along with indirect propositional hypotheses. Makes `native_decide` fail at elaboration time on failure without sacrificing performance (the decision procedure is still evaluated just once). Now `native_decide` supports universe polymorphism. Closes #2072
1338 lines
54 KiB
Text
1338 lines
54 KiB
Text
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 20, "character": 20}}
|
|
{"items": [], "isIncomplete": true}
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 23, "character": 21}}
|
|
{"items":
|
|
[{"sortText": "0",
|
|
"label": "exact",
|
|
"kind": 14,
|
|
"documentation": {"value": "Another docstring ", "kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 23, "character": 21}}}},
|
|
{"sortText": "1",
|
|
"label": "Lean.Parser.Tactic.introMatch",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"The tactic\n```\nintro\n| pat1 => tac1\n| pat2 => tac2\n```\nis the same as:\n```\nintro x\nmatch x with\n| pat1 => tac1\n| pat2 => tac2\n```\nThat is, `intro` can be followed by match arms and it introduces the values while\ndoing a pattern match. This is equivalent to `fun` with match arms in term mode.\n",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 23, "character": 21}}}},
|
|
{"sortText": "2",
|
|
"label": "Lean.Parser.Tactic.match",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`match` performs case analysis on one or more expressions.\nSee [Induction and Recursion][tpil4].\nThe syntax for the `match` tactic is the same as term-mode `match`, except that\nthe match arms are tactics instead of expressions.\n```\nexample (n : Nat) : n = n := by\n match n with\n | 0 => rfl\n | i+1 => simp\n```\n\n[tpil4]: https://lean-lang.org/theorem_proving_in_lean4/induction_and_recursion.html\n",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 23, "character": 21}}}},
|
|
{"sortText": "3",
|
|
"label": "Lean.Parser.Tactic.nestedTactic",
|
|
"kind": 14,
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 23, "character": 21}}}},
|
|
{"sortText": "4",
|
|
"label": "Lean.Parser.Tactic.open",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`open Foo in tacs` (the tactic) acts like `open Foo` at command level,\nbut it opens a namespace only within the tactics `tacs`. ",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 23, "character": 21}}}},
|
|
{"sortText": "5",
|
|
"label": "Lean.Parser.Tactic.set_option",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`set_option opt val in tacs` (the tactic) acts like `set_option opt val` at the command level,\nbut it sets the option only within the tactics `tacs`. ",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 23, "character": 21}}}},
|
|
{"sortText": "6",
|
|
"label": "Lean.Parser.Tactic.unknown",
|
|
"kind": 14,
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 23, "character": 21}}}},
|
|
{"sortText": "7",
|
|
"label": "skip",
|
|
"kind": 14,
|
|
"documentation": {"value": "A docstring ", "kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 23, "character": 21}}}}],
|
|
"isIncomplete": true}
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 26, "character": 24}}
|
|
{"items":
|
|
[{"sortText": "0",
|
|
"label": "exact",
|
|
"kind": 14,
|
|
"documentation": {"value": "Another docstring ", "kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 26, "character": 24}}}},
|
|
{"sortText": "1",
|
|
"label": "Lean.Parser.Tactic.introMatch",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"The tactic\n```\nintro\n| pat1 => tac1\n| pat2 => tac2\n```\nis the same as:\n```\nintro x\nmatch x with\n| pat1 => tac1\n| pat2 => tac2\n```\nThat is, `intro` can be followed by match arms and it introduces the values while\ndoing a pattern match. This is equivalent to `fun` with match arms in term mode.\n",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 26, "character": 24}}}},
|
|
{"sortText": "2",
|
|
"label": "Lean.Parser.Tactic.match",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`match` performs case analysis on one or more expressions.\nSee [Induction and Recursion][tpil4].\nThe syntax for the `match` tactic is the same as term-mode `match`, except that\nthe match arms are tactics instead of expressions.\n```\nexample (n : Nat) : n = n := by\n match n with\n | 0 => rfl\n | i+1 => simp\n```\n\n[tpil4]: https://lean-lang.org/theorem_proving_in_lean4/induction_and_recursion.html\n",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 26, "character": 24}}}},
|
|
{"sortText": "3",
|
|
"label": "Lean.Parser.Tactic.nestedTactic",
|
|
"kind": 14,
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 26, "character": 24}}}},
|
|
{"sortText": "4",
|
|
"label": "Lean.Parser.Tactic.open",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`open Foo in tacs` (the tactic) acts like `open Foo` at command level,\nbut it opens a namespace only within the tactics `tacs`. ",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 26, "character": 24}}}},
|
|
{"sortText": "5",
|
|
"label": "Lean.Parser.Tactic.set_option",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`set_option opt val in tacs` (the tactic) acts like `set_option opt val` at the command level,\nbut it sets the option only within the tactics `tacs`. ",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 26, "character": 24}}}},
|
|
{"sortText": "6",
|
|
"label": "Lean.Parser.Tactic.unknown",
|
|
"kind": 14,
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 26, "character": 24}}}},
|
|
{"sortText": "7",
|
|
"label": "skip",
|
|
"kind": 14,
|
|
"documentation": {"value": "A docstring ", "kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 26, "character": 24}}}}],
|
|
"isIncomplete": true}
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 29, "character": 25}}
|
|
{"items": [], "isIncomplete": true}
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 32, "character": 26}}
|
|
{"items":
|
|
[{"sortText": "0",
|
|
"label": "exact",
|
|
"kind": 14,
|
|
"documentation": {"value": "Another docstring ", "kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 32, "character": 26}}}},
|
|
{"sortText": "1",
|
|
"label": "Lean.Parser.Tactic.introMatch",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"The tactic\n```\nintro\n| pat1 => tac1\n| pat2 => tac2\n```\nis the same as:\n```\nintro x\nmatch x with\n| pat1 => tac1\n| pat2 => tac2\n```\nThat is, `intro` can be followed by match arms and it introduces the values while\ndoing a pattern match. This is equivalent to `fun` with match arms in term mode.\n",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 32, "character": 26}}}},
|
|
{"sortText": "2",
|
|
"label": "Lean.Parser.Tactic.match",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`match` performs case analysis on one or more expressions.\nSee [Induction and Recursion][tpil4].\nThe syntax for the `match` tactic is the same as term-mode `match`, except that\nthe match arms are tactics instead of expressions.\n```\nexample (n : Nat) : n = n := by\n match n with\n | 0 => rfl\n | i+1 => simp\n```\n\n[tpil4]: https://lean-lang.org/theorem_proving_in_lean4/induction_and_recursion.html\n",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 32, "character": 26}}}},
|
|
{"sortText": "3",
|
|
"label": "Lean.Parser.Tactic.nestedTactic",
|
|
"kind": 14,
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 32, "character": 26}}}},
|
|
{"sortText": "4",
|
|
"label": "Lean.Parser.Tactic.open",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`open Foo in tacs` (the tactic) acts like `open Foo` at command level,\nbut it opens a namespace only within the tactics `tacs`. ",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 32, "character": 26}}}},
|
|
{"sortText": "5",
|
|
"label": "Lean.Parser.Tactic.set_option",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`set_option opt val in tacs` (the tactic) acts like `set_option opt val` at the command level,\nbut it sets the option only within the tactics `tacs`. ",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 32, "character": 26}}}},
|
|
{"sortText": "6",
|
|
"label": "Lean.Parser.Tactic.unknown",
|
|
"kind": 14,
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 32, "character": 26}}}},
|
|
{"sortText": "7",
|
|
"label": "skip",
|
|
"kind": 14,
|
|
"documentation": {"value": "A docstring ", "kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 32, "character": 26}}}}],
|
|
"isIncomplete": true}
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 35, "character": 27}}
|
|
{"items":
|
|
[{"sortText": "0",
|
|
"label": "exact",
|
|
"kind": 14,
|
|
"documentation": {"value": "Another docstring ", "kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 35, "character": 27}}}},
|
|
{"sortText": "1",
|
|
"label": "Lean.Parser.Tactic.introMatch",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"The tactic\n```\nintro\n| pat1 => tac1\n| pat2 => tac2\n```\nis the same as:\n```\nintro x\nmatch x with\n| pat1 => tac1\n| pat2 => tac2\n```\nThat is, `intro` can be followed by match arms and it introduces the values while\ndoing a pattern match. This is equivalent to `fun` with match arms in term mode.\n",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 35, "character": 27}}}},
|
|
{"sortText": "2",
|
|
"label": "Lean.Parser.Tactic.match",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`match` performs case analysis on one or more expressions.\nSee [Induction and Recursion][tpil4].\nThe syntax for the `match` tactic is the same as term-mode `match`, except that\nthe match arms are tactics instead of expressions.\n```\nexample (n : Nat) : n = n := by\n match n with\n | 0 => rfl\n | i+1 => simp\n```\n\n[tpil4]: https://lean-lang.org/theorem_proving_in_lean4/induction_and_recursion.html\n",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 35, "character": 27}}}},
|
|
{"sortText": "3",
|
|
"label": "Lean.Parser.Tactic.nestedTactic",
|
|
"kind": 14,
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 35, "character": 27}}}},
|
|
{"sortText": "4",
|
|
"label": "Lean.Parser.Tactic.open",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`open Foo in tacs` (the tactic) acts like `open Foo` at command level,\nbut it opens a namespace only within the tactics `tacs`. ",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 35, "character": 27}}}},
|
|
{"sortText": "5",
|
|
"label": "Lean.Parser.Tactic.set_option",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`set_option opt val in tacs` (the tactic) acts like `set_option opt val` at the command level,\nbut it sets the option only within the tactics `tacs`. ",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 35, "character": 27}}}},
|
|
{"sortText": "6",
|
|
"label": "Lean.Parser.Tactic.unknown",
|
|
"kind": 14,
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 35, "character": 27}}}},
|
|
{"sortText": "7",
|
|
"label": "skip",
|
|
"kind": 14,
|
|
"documentation": {"value": "A docstring ", "kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 35, "character": 27}}}}],
|
|
"isIncomplete": true}
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 40, "character": 7}}
|
|
{"items":
|
|
[{"sortText": "0",
|
|
"label": "exact",
|
|
"kind": 14,
|
|
"documentation": {"value": "Another docstring ", "kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 40, "character": 7}}}},
|
|
{"sortText": "1",
|
|
"label": "Lean.Parser.Tactic.introMatch",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"The tactic\n```\nintro\n| pat1 => tac1\n| pat2 => tac2\n```\nis the same as:\n```\nintro x\nmatch x with\n| pat1 => tac1\n| pat2 => tac2\n```\nThat is, `intro` can be followed by match arms and it introduces the values while\ndoing a pattern match. This is equivalent to `fun` with match arms in term mode.\n",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 40, "character": 7}}}},
|
|
{"sortText": "2",
|
|
"label": "Lean.Parser.Tactic.match",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`match` performs case analysis on one or more expressions.\nSee [Induction and Recursion][tpil4].\nThe syntax for the `match` tactic is the same as term-mode `match`, except that\nthe match arms are tactics instead of expressions.\n```\nexample (n : Nat) : n = n := by\n match n with\n | 0 => rfl\n | i+1 => simp\n```\n\n[tpil4]: https://lean-lang.org/theorem_proving_in_lean4/induction_and_recursion.html\n",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 40, "character": 7}}}},
|
|
{"sortText": "3",
|
|
"label": "Lean.Parser.Tactic.nestedTactic",
|
|
"kind": 14,
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 40, "character": 7}}}},
|
|
{"sortText": "4",
|
|
"label": "Lean.Parser.Tactic.open",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`open Foo in tacs` (the tactic) acts like `open Foo` at command level,\nbut it opens a namespace only within the tactics `tacs`. ",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 40, "character": 7}}}},
|
|
{"sortText": "5",
|
|
"label": "Lean.Parser.Tactic.set_option",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`set_option opt val in tacs` (the tactic) acts like `set_option opt val` at the command level,\nbut it sets the option only within the tactics `tacs`. ",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 40, "character": 7}}}},
|
|
{"sortText": "6",
|
|
"label": "Lean.Parser.Tactic.unknown",
|
|
"kind": 14,
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 40, "character": 7}}}},
|
|
{"sortText": "7",
|
|
"label": "skip",
|
|
"kind": 14,
|
|
"documentation": {"value": "A docstring ", "kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 40, "character": 7}}}}],
|
|
"isIncomplete": true}
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 44, "character": 2}}
|
|
{"items":
|
|
[{"sortText": "0",
|
|
"label": "exact",
|
|
"kind": 14,
|
|
"documentation": {"value": "Another docstring ", "kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 44, "character": 2}}}},
|
|
{"sortText": "1",
|
|
"label": "Lean.Parser.Tactic.introMatch",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"The tactic\n```\nintro\n| pat1 => tac1\n| pat2 => tac2\n```\nis the same as:\n```\nintro x\nmatch x with\n| pat1 => tac1\n| pat2 => tac2\n```\nThat is, `intro` can be followed by match arms and it introduces the values while\ndoing a pattern match. This is equivalent to `fun` with match arms in term mode.\n",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 44, "character": 2}}}},
|
|
{"sortText": "2",
|
|
"label": "Lean.Parser.Tactic.match",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`match` performs case analysis on one or more expressions.\nSee [Induction and Recursion][tpil4].\nThe syntax for the `match` tactic is the same as term-mode `match`, except that\nthe match arms are tactics instead of expressions.\n```\nexample (n : Nat) : n = n := by\n match n with\n | 0 => rfl\n | i+1 => simp\n```\n\n[tpil4]: https://lean-lang.org/theorem_proving_in_lean4/induction_and_recursion.html\n",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 44, "character": 2}}}},
|
|
{"sortText": "3",
|
|
"label": "Lean.Parser.Tactic.nestedTactic",
|
|
"kind": 14,
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 44, "character": 2}}}},
|
|
{"sortText": "4",
|
|
"label": "Lean.Parser.Tactic.open",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`open Foo in tacs` (the tactic) acts like `open Foo` at command level,\nbut it opens a namespace only within the tactics `tacs`. ",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 44, "character": 2}}}},
|
|
{"sortText": "5",
|
|
"label": "Lean.Parser.Tactic.set_option",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`set_option opt val in tacs` (the tactic) acts like `set_option opt val` at the command level,\nbut it sets the option only within the tactics `tacs`. ",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 44, "character": 2}}}},
|
|
{"sortText": "6",
|
|
"label": "Lean.Parser.Tactic.unknown",
|
|
"kind": 14,
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 44, "character": 2}}}},
|
|
{"sortText": "7",
|
|
"label": "skip",
|
|
"kind": 14,
|
|
"documentation": {"value": "A docstring ", "kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 44, "character": 2}}}}],
|
|
"isIncomplete": true}
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 49, "character": 2}}
|
|
{"items":
|
|
[{"sortText": "0",
|
|
"label": "exact",
|
|
"kind": 14,
|
|
"documentation": {"value": "Another docstring ", "kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 49, "character": 2}}}},
|
|
{"sortText": "1",
|
|
"label": "Lean.Parser.Tactic.introMatch",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"The tactic\n```\nintro\n| pat1 => tac1\n| pat2 => tac2\n```\nis the same as:\n```\nintro x\nmatch x with\n| pat1 => tac1\n| pat2 => tac2\n```\nThat is, `intro` can be followed by match arms and it introduces the values while\ndoing a pattern match. This is equivalent to `fun` with match arms in term mode.\n",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 49, "character": 2}}}},
|
|
{"sortText": "2",
|
|
"label": "Lean.Parser.Tactic.match",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`match` performs case analysis on one or more expressions.\nSee [Induction and Recursion][tpil4].\nThe syntax for the `match` tactic is the same as term-mode `match`, except that\nthe match arms are tactics instead of expressions.\n```\nexample (n : Nat) : n = n := by\n match n with\n | 0 => rfl\n | i+1 => simp\n```\n\n[tpil4]: https://lean-lang.org/theorem_proving_in_lean4/induction_and_recursion.html\n",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 49, "character": 2}}}},
|
|
{"sortText": "3",
|
|
"label": "Lean.Parser.Tactic.nestedTactic",
|
|
"kind": 14,
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 49, "character": 2}}}},
|
|
{"sortText": "4",
|
|
"label": "Lean.Parser.Tactic.open",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`open Foo in tacs` (the tactic) acts like `open Foo` at command level,\nbut it opens a namespace only within the tactics `tacs`. ",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 49, "character": 2}}}},
|
|
{"sortText": "5",
|
|
"label": "Lean.Parser.Tactic.set_option",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`set_option opt val in tacs` (the tactic) acts like `set_option opt val` at the command level,\nbut it sets the option only within the tactics `tacs`. ",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 49, "character": 2}}}},
|
|
{"sortText": "6",
|
|
"label": "Lean.Parser.Tactic.unknown",
|
|
"kind": 14,
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 49, "character": 2}}}},
|
|
{"sortText": "7",
|
|
"label": "skip",
|
|
"kind": 14,
|
|
"documentation": {"value": "A docstring ", "kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 49, "character": 2}}}}],
|
|
"isIncomplete": true}
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 53, "character": 2}}
|
|
{"items":
|
|
[{"sortText": "0",
|
|
"label": "exact",
|
|
"kind": 14,
|
|
"documentation": {"value": "Another docstring ", "kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 53, "character": 2}}}},
|
|
{"sortText": "1",
|
|
"label": "Lean.Parser.Tactic.introMatch",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"The tactic\n```\nintro\n| pat1 => tac1\n| pat2 => tac2\n```\nis the same as:\n```\nintro x\nmatch x with\n| pat1 => tac1\n| pat2 => tac2\n```\nThat is, `intro` can be followed by match arms and it introduces the values while\ndoing a pattern match. This is equivalent to `fun` with match arms in term mode.\n",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 53, "character": 2}}}},
|
|
{"sortText": "2",
|
|
"label": "Lean.Parser.Tactic.match",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`match` performs case analysis on one or more expressions.\nSee [Induction and Recursion][tpil4].\nThe syntax for the `match` tactic is the same as term-mode `match`, except that\nthe match arms are tactics instead of expressions.\n```\nexample (n : Nat) : n = n := by\n match n with\n | 0 => rfl\n | i+1 => simp\n```\n\n[tpil4]: https://lean-lang.org/theorem_proving_in_lean4/induction_and_recursion.html\n",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 53, "character": 2}}}},
|
|
{"sortText": "3",
|
|
"label": "Lean.Parser.Tactic.nestedTactic",
|
|
"kind": 14,
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 53, "character": 2}}}},
|
|
{"sortText": "4",
|
|
"label": "Lean.Parser.Tactic.open",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`open Foo in tacs` (the tactic) acts like `open Foo` at command level,\nbut it opens a namespace only within the tactics `tacs`. ",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 53, "character": 2}}}},
|
|
{"sortText": "5",
|
|
"label": "Lean.Parser.Tactic.set_option",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`set_option opt val in tacs` (the tactic) acts like `set_option opt val` at the command level,\nbut it sets the option only within the tactics `tacs`. ",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 53, "character": 2}}}},
|
|
{"sortText": "6",
|
|
"label": "Lean.Parser.Tactic.unknown",
|
|
"kind": 14,
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 53, "character": 2}}}},
|
|
{"sortText": "7",
|
|
"label": "skip",
|
|
"kind": 14,
|
|
"documentation": {"value": "A docstring ", "kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 53, "character": 2}}}}],
|
|
"isIncomplete": true}
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 59, "character": 4}}
|
|
{"items":
|
|
[{"sortText": "0",
|
|
"label": "exact",
|
|
"kind": 14,
|
|
"documentation": {"value": "Another docstring ", "kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 59, "character": 4}}}},
|
|
{"sortText": "1",
|
|
"label": "Lean.Parser.Tactic.introMatch",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"The tactic\n```\nintro\n| pat1 => tac1\n| pat2 => tac2\n```\nis the same as:\n```\nintro x\nmatch x with\n| pat1 => tac1\n| pat2 => tac2\n```\nThat is, `intro` can be followed by match arms and it introduces the values while\ndoing a pattern match. This is equivalent to `fun` with match arms in term mode.\n",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 59, "character": 4}}}},
|
|
{"sortText": "2",
|
|
"label": "Lean.Parser.Tactic.match",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`match` performs case analysis on one or more expressions.\nSee [Induction and Recursion][tpil4].\nThe syntax for the `match` tactic is the same as term-mode `match`, except that\nthe match arms are tactics instead of expressions.\n```\nexample (n : Nat) : n = n := by\n match n with\n | 0 => rfl\n | i+1 => simp\n```\n\n[tpil4]: https://lean-lang.org/theorem_proving_in_lean4/induction_and_recursion.html\n",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 59, "character": 4}}}},
|
|
{"sortText": "3",
|
|
"label": "Lean.Parser.Tactic.nestedTactic",
|
|
"kind": 14,
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 59, "character": 4}}}},
|
|
{"sortText": "4",
|
|
"label": "Lean.Parser.Tactic.open",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`open Foo in tacs` (the tactic) acts like `open Foo` at command level,\nbut it opens a namespace only within the tactics `tacs`. ",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 59, "character": 4}}}},
|
|
{"sortText": "5",
|
|
"label": "Lean.Parser.Tactic.set_option",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`set_option opt val in tacs` (the tactic) acts like `set_option opt val` at the command level,\nbut it sets the option only within the tactics `tacs`. ",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 59, "character": 4}}}},
|
|
{"sortText": "6",
|
|
"label": "Lean.Parser.Tactic.unknown",
|
|
"kind": 14,
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 59, "character": 4}}}},
|
|
{"sortText": "7",
|
|
"label": "skip",
|
|
"kind": 14,
|
|
"documentation": {"value": "A docstring ", "kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 59, "character": 4}}}}],
|
|
"isIncomplete": true}
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 64, "character": 2}}
|
|
{"items":
|
|
[{"sortText": "0",
|
|
"label": "exact",
|
|
"kind": 14,
|
|
"documentation": {"value": "Another docstring ", "kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 64, "character": 2}}}},
|
|
{"sortText": "1",
|
|
"label": "Lean.Parser.Tactic.introMatch",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"The tactic\n```\nintro\n| pat1 => tac1\n| pat2 => tac2\n```\nis the same as:\n```\nintro x\nmatch x with\n| pat1 => tac1\n| pat2 => tac2\n```\nThat is, `intro` can be followed by match arms and it introduces the values while\ndoing a pattern match. This is equivalent to `fun` with match arms in term mode.\n",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 64, "character": 2}}}},
|
|
{"sortText": "2",
|
|
"label": "Lean.Parser.Tactic.match",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`match` performs case analysis on one or more expressions.\nSee [Induction and Recursion][tpil4].\nThe syntax for the `match` tactic is the same as term-mode `match`, except that\nthe match arms are tactics instead of expressions.\n```\nexample (n : Nat) : n = n := by\n match n with\n | 0 => rfl\n | i+1 => simp\n```\n\n[tpil4]: https://lean-lang.org/theorem_proving_in_lean4/induction_and_recursion.html\n",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 64, "character": 2}}}},
|
|
{"sortText": "3",
|
|
"label": "Lean.Parser.Tactic.nestedTactic",
|
|
"kind": 14,
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 64, "character": 2}}}},
|
|
{"sortText": "4",
|
|
"label": "Lean.Parser.Tactic.open",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`open Foo in tacs` (the tactic) acts like `open Foo` at command level,\nbut it opens a namespace only within the tactics `tacs`. ",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 64, "character": 2}}}},
|
|
{"sortText": "5",
|
|
"label": "Lean.Parser.Tactic.set_option",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`set_option opt val in tacs` (the tactic) acts like `set_option opt val` at the command level,\nbut it sets the option only within the tactics `tacs`. ",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 64, "character": 2}}}},
|
|
{"sortText": "6",
|
|
"label": "Lean.Parser.Tactic.unknown",
|
|
"kind": 14,
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 64, "character": 2}}}},
|
|
{"sortText": "7",
|
|
"label": "skip",
|
|
"kind": 14,
|
|
"documentation": {"value": "A docstring ", "kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 64, "character": 2}}}}],
|
|
"isIncomplete": true}
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 70, "character": 4}}
|
|
{"items":
|
|
[{"sortText": "0",
|
|
"label": "exact",
|
|
"kind": 14,
|
|
"documentation": {"value": "Another docstring ", "kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 70, "character": 4}}}},
|
|
{"sortText": "1",
|
|
"label": "Lean.Parser.Tactic.introMatch",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"The tactic\n```\nintro\n| pat1 => tac1\n| pat2 => tac2\n```\nis the same as:\n```\nintro x\nmatch x with\n| pat1 => tac1\n| pat2 => tac2\n```\nThat is, `intro` can be followed by match arms and it introduces the values while\ndoing a pattern match. This is equivalent to `fun` with match arms in term mode.\n",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 70, "character": 4}}}},
|
|
{"sortText": "2",
|
|
"label": "Lean.Parser.Tactic.match",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`match` performs case analysis on one or more expressions.\nSee [Induction and Recursion][tpil4].\nThe syntax for the `match` tactic is the same as term-mode `match`, except that\nthe match arms are tactics instead of expressions.\n```\nexample (n : Nat) : n = n := by\n match n with\n | 0 => rfl\n | i+1 => simp\n```\n\n[tpil4]: https://lean-lang.org/theorem_proving_in_lean4/induction_and_recursion.html\n",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 70, "character": 4}}}},
|
|
{"sortText": "3",
|
|
"label": "Lean.Parser.Tactic.nestedTactic",
|
|
"kind": 14,
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 70, "character": 4}}}},
|
|
{"sortText": "4",
|
|
"label": "Lean.Parser.Tactic.open",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`open Foo in tacs` (the tactic) acts like `open Foo` at command level,\nbut it opens a namespace only within the tactics `tacs`. ",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 70, "character": 4}}}},
|
|
{"sortText": "5",
|
|
"label": "Lean.Parser.Tactic.set_option",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`set_option opt val in tacs` (the tactic) acts like `set_option opt val` at the command level,\nbut it sets the option only within the tactics `tacs`. ",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 70, "character": 4}}}},
|
|
{"sortText": "6",
|
|
"label": "Lean.Parser.Tactic.unknown",
|
|
"kind": 14,
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 70, "character": 4}}}},
|
|
{"sortText": "7",
|
|
"label": "skip",
|
|
"kind": 14,
|
|
"documentation": {"value": "A docstring ", "kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 70, "character": 4}}}}],
|
|
"isIncomplete": true}
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 76, "character": 2}}
|
|
{"items":
|
|
[{"sortText": "0",
|
|
"label": "exact",
|
|
"kind": 14,
|
|
"documentation": {"value": "Another docstring ", "kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 76, "character": 2}}}},
|
|
{"sortText": "1",
|
|
"label": "Lean.Parser.Tactic.introMatch",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"The tactic\n```\nintro\n| pat1 => tac1\n| pat2 => tac2\n```\nis the same as:\n```\nintro x\nmatch x with\n| pat1 => tac1\n| pat2 => tac2\n```\nThat is, `intro` can be followed by match arms and it introduces the values while\ndoing a pattern match. This is equivalent to `fun` with match arms in term mode.\n",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 76, "character": 2}}}},
|
|
{"sortText": "2",
|
|
"label": "Lean.Parser.Tactic.match",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`match` performs case analysis on one or more expressions.\nSee [Induction and Recursion][tpil4].\nThe syntax for the `match` tactic is the same as term-mode `match`, except that\nthe match arms are tactics instead of expressions.\n```\nexample (n : Nat) : n = n := by\n match n with\n | 0 => rfl\n | i+1 => simp\n```\n\n[tpil4]: https://lean-lang.org/theorem_proving_in_lean4/induction_and_recursion.html\n",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 76, "character": 2}}}},
|
|
{"sortText": "3",
|
|
"label": "Lean.Parser.Tactic.nestedTactic",
|
|
"kind": 14,
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 76, "character": 2}}}},
|
|
{"sortText": "4",
|
|
"label": "Lean.Parser.Tactic.open",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`open Foo in tacs` (the tactic) acts like `open Foo` at command level,\nbut it opens a namespace only within the tactics `tacs`. ",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 76, "character": 2}}}},
|
|
{"sortText": "5",
|
|
"label": "Lean.Parser.Tactic.set_option",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`set_option opt val in tacs` (the tactic) acts like `set_option opt val` at the command level,\nbut it sets the option only within the tactics `tacs`. ",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 76, "character": 2}}}},
|
|
{"sortText": "6",
|
|
"label": "Lean.Parser.Tactic.unknown",
|
|
"kind": 14,
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 76, "character": 2}}}},
|
|
{"sortText": "7",
|
|
"label": "skip",
|
|
"kind": 14,
|
|
"documentation": {"value": "A docstring ", "kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 76, "character": 2}}}}],
|
|
"isIncomplete": true}
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 81, "character": 4}}
|
|
{"items": [], "isIncomplete": true}
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 86, "character": 2}}
|
|
{"items":
|
|
[{"sortText": "0",
|
|
"label": "exact",
|
|
"kind": 14,
|
|
"documentation": {"value": "Another docstring ", "kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 86, "character": 2}}}},
|
|
{"sortText": "1",
|
|
"label": "Lean.Parser.Tactic.introMatch",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"The tactic\n```\nintro\n| pat1 => tac1\n| pat2 => tac2\n```\nis the same as:\n```\nintro x\nmatch x with\n| pat1 => tac1\n| pat2 => tac2\n```\nThat is, `intro` can be followed by match arms and it introduces the values while\ndoing a pattern match. This is equivalent to `fun` with match arms in term mode.\n",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 86, "character": 2}}}},
|
|
{"sortText": "2",
|
|
"label": "Lean.Parser.Tactic.match",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`match` performs case analysis on one or more expressions.\nSee [Induction and Recursion][tpil4].\nThe syntax for the `match` tactic is the same as term-mode `match`, except that\nthe match arms are tactics instead of expressions.\n```\nexample (n : Nat) : n = n := by\n match n with\n | 0 => rfl\n | i+1 => simp\n```\n\n[tpil4]: https://lean-lang.org/theorem_proving_in_lean4/induction_and_recursion.html\n",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 86, "character": 2}}}},
|
|
{"sortText": "3",
|
|
"label": "Lean.Parser.Tactic.nestedTactic",
|
|
"kind": 14,
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 86, "character": 2}}}},
|
|
{"sortText": "4",
|
|
"label": "Lean.Parser.Tactic.open",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`open Foo in tacs` (the tactic) acts like `open Foo` at command level,\nbut it opens a namespace only within the tactics `tacs`. ",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 86, "character": 2}}}},
|
|
{"sortText": "5",
|
|
"label": "Lean.Parser.Tactic.set_option",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`set_option opt val in tacs` (the tactic) acts like `set_option opt val` at the command level,\nbut it sets the option only within the tactics `tacs`. ",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 86, "character": 2}}}},
|
|
{"sortText": "6",
|
|
"label": "Lean.Parser.Tactic.unknown",
|
|
"kind": 14,
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 86, "character": 2}}}},
|
|
{"sortText": "7",
|
|
"label": "skip",
|
|
"kind": 14,
|
|
"documentation": {"value": "A docstring ", "kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 86, "character": 2}}}}],
|
|
"isIncomplete": true}
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 91, "character": 4}}
|
|
{"items":
|
|
[{"sortText": "0",
|
|
"label": "exact",
|
|
"kind": 14,
|
|
"documentation": {"value": "Another docstring ", "kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 91, "character": 4}}}},
|
|
{"sortText": "1",
|
|
"label": "Lean.Parser.Tactic.introMatch",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"The tactic\n```\nintro\n| pat1 => tac1\n| pat2 => tac2\n```\nis the same as:\n```\nintro x\nmatch x with\n| pat1 => tac1\n| pat2 => tac2\n```\nThat is, `intro` can be followed by match arms and it introduces the values while\ndoing a pattern match. This is equivalent to `fun` with match arms in term mode.\n",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 91, "character": 4}}}},
|
|
{"sortText": "2",
|
|
"label": "Lean.Parser.Tactic.match",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`match` performs case analysis on one or more expressions.\nSee [Induction and Recursion][tpil4].\nThe syntax for the `match` tactic is the same as term-mode `match`, except that\nthe match arms are tactics instead of expressions.\n```\nexample (n : Nat) : n = n := by\n match n with\n | 0 => rfl\n | i+1 => simp\n```\n\n[tpil4]: https://lean-lang.org/theorem_proving_in_lean4/induction_and_recursion.html\n",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 91, "character": 4}}}},
|
|
{"sortText": "3",
|
|
"label": "Lean.Parser.Tactic.nestedTactic",
|
|
"kind": 14,
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 91, "character": 4}}}},
|
|
{"sortText": "4",
|
|
"label": "Lean.Parser.Tactic.open",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`open Foo in tacs` (the tactic) acts like `open Foo` at command level,\nbut it opens a namespace only within the tactics `tacs`. ",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 91, "character": 4}}}},
|
|
{"sortText": "5",
|
|
"label": "Lean.Parser.Tactic.set_option",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`set_option opt val in tacs` (the tactic) acts like `set_option opt val` at the command level,\nbut it sets the option only within the tactics `tacs`. ",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 91, "character": 4}}}},
|
|
{"sortText": "6",
|
|
"label": "Lean.Parser.Tactic.unknown",
|
|
"kind": 14,
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 91, "character": 4}}}},
|
|
{"sortText": "7",
|
|
"label": "skip",
|
|
"kind": 14,
|
|
"documentation": {"value": "A docstring ", "kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 91, "character": 4}}}}],
|
|
"isIncomplete": true}
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 96, "character": 2}}
|
|
{"items":
|
|
[{"sortText": "0",
|
|
"label": "exact",
|
|
"kind": 14,
|
|
"documentation": {"value": "Another docstring ", "kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 96, "character": 2}}}},
|
|
{"sortText": "1",
|
|
"label": "Lean.Parser.Tactic.introMatch",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"The tactic\n```\nintro\n| pat1 => tac1\n| pat2 => tac2\n```\nis the same as:\n```\nintro x\nmatch x with\n| pat1 => tac1\n| pat2 => tac2\n```\nThat is, `intro` can be followed by match arms and it introduces the values while\ndoing a pattern match. This is equivalent to `fun` with match arms in term mode.\n",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 96, "character": 2}}}},
|
|
{"sortText": "2",
|
|
"label": "Lean.Parser.Tactic.match",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`match` performs case analysis on one or more expressions.\nSee [Induction and Recursion][tpil4].\nThe syntax for the `match` tactic is the same as term-mode `match`, except that\nthe match arms are tactics instead of expressions.\n```\nexample (n : Nat) : n = n := by\n match n with\n | 0 => rfl\n | i+1 => simp\n```\n\n[tpil4]: https://lean-lang.org/theorem_proving_in_lean4/induction_and_recursion.html\n",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 96, "character": 2}}}},
|
|
{"sortText": "3",
|
|
"label": "Lean.Parser.Tactic.nestedTactic",
|
|
"kind": 14,
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 96, "character": 2}}}},
|
|
{"sortText": "4",
|
|
"label": "Lean.Parser.Tactic.open",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`open Foo in tacs` (the tactic) acts like `open Foo` at command level,\nbut it opens a namespace only within the tactics `tacs`. ",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 96, "character": 2}}}},
|
|
{"sortText": "5",
|
|
"label": "Lean.Parser.Tactic.set_option",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`set_option opt val in tacs` (the tactic) acts like `set_option opt val` at the command level,\nbut it sets the option only within the tactics `tacs`. ",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 96, "character": 2}}}},
|
|
{"sortText": "6",
|
|
"label": "Lean.Parser.Tactic.unknown",
|
|
"kind": 14,
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 96, "character": 2}}}},
|
|
{"sortText": "7",
|
|
"label": "skip",
|
|
"kind": 14,
|
|
"documentation": {"value": "A docstring ", "kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 96, "character": 2}}}}],
|
|
"isIncomplete": true}
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 102, "character": 4}}
|
|
{"items":
|
|
[{"sortText": "0",
|
|
"label": "exact",
|
|
"kind": 14,
|
|
"documentation": {"value": "Another docstring ", "kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 102, "character": 4}}}},
|
|
{"sortText": "1",
|
|
"label": "Lean.Parser.Tactic.introMatch",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"The tactic\n```\nintro\n| pat1 => tac1\n| pat2 => tac2\n```\nis the same as:\n```\nintro x\nmatch x with\n| pat1 => tac1\n| pat2 => tac2\n```\nThat is, `intro` can be followed by match arms and it introduces the values while\ndoing a pattern match. This is equivalent to `fun` with match arms in term mode.\n",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 102, "character": 4}}}},
|
|
{"sortText": "2",
|
|
"label": "Lean.Parser.Tactic.match",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`match` performs case analysis on one or more expressions.\nSee [Induction and Recursion][tpil4].\nThe syntax for the `match` tactic is the same as term-mode `match`, except that\nthe match arms are tactics instead of expressions.\n```\nexample (n : Nat) : n = n := by\n match n with\n | 0 => rfl\n | i+1 => simp\n```\n\n[tpil4]: https://lean-lang.org/theorem_proving_in_lean4/induction_and_recursion.html\n",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 102, "character": 4}}}},
|
|
{"sortText": "3",
|
|
"label": "Lean.Parser.Tactic.nestedTactic",
|
|
"kind": 14,
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 102, "character": 4}}}},
|
|
{"sortText": "4",
|
|
"label": "Lean.Parser.Tactic.open",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`open Foo in tacs` (the tactic) acts like `open Foo` at command level,\nbut it opens a namespace only within the tactics `tacs`. ",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 102, "character": 4}}}},
|
|
{"sortText": "5",
|
|
"label": "Lean.Parser.Tactic.set_option",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`set_option opt val in tacs` (the tactic) acts like `set_option opt val` at the command level,\nbut it sets the option only within the tactics `tacs`. ",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 102, "character": 4}}}},
|
|
{"sortText": "6",
|
|
"label": "Lean.Parser.Tactic.unknown",
|
|
"kind": 14,
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 102, "character": 4}}}},
|
|
{"sortText": "7",
|
|
"label": "skip",
|
|
"kind": 14,
|
|
"documentation": {"value": "A docstring ", "kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 102, "character": 4}}}}],
|
|
"isIncomplete": true}
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 108, "character": 2}}
|
|
{"items": [], "isIncomplete": true}
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 112, "character": 2}}
|
|
{"items":
|
|
[{"sortText": "0",
|
|
"label": "exact",
|
|
"kind": 14,
|
|
"documentation": {"value": "Another docstring ", "kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 112, "character": 2}}}},
|
|
{"sortText": "1",
|
|
"label": "Lean.Parser.Tactic.introMatch",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"The tactic\n```\nintro\n| pat1 => tac1\n| pat2 => tac2\n```\nis the same as:\n```\nintro x\nmatch x with\n| pat1 => tac1\n| pat2 => tac2\n```\nThat is, `intro` can be followed by match arms and it introduces the values while\ndoing a pattern match. This is equivalent to `fun` with match arms in term mode.\n",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 112, "character": 2}}}},
|
|
{"sortText": "2",
|
|
"label": "Lean.Parser.Tactic.match",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`match` performs case analysis on one or more expressions.\nSee [Induction and Recursion][tpil4].\nThe syntax for the `match` tactic is the same as term-mode `match`, except that\nthe match arms are tactics instead of expressions.\n```\nexample (n : Nat) : n = n := by\n match n with\n | 0 => rfl\n | i+1 => simp\n```\n\n[tpil4]: https://lean-lang.org/theorem_proving_in_lean4/induction_and_recursion.html\n",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 112, "character": 2}}}},
|
|
{"sortText": "3",
|
|
"label": "Lean.Parser.Tactic.nestedTactic",
|
|
"kind": 14,
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 112, "character": 2}}}},
|
|
{"sortText": "4",
|
|
"label": "Lean.Parser.Tactic.open",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`open Foo in tacs` (the tactic) acts like `open Foo` at command level,\nbut it opens a namespace only within the tactics `tacs`. ",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 112, "character": 2}}}},
|
|
{"sortText": "5",
|
|
"label": "Lean.Parser.Tactic.set_option",
|
|
"kind": 14,
|
|
"documentation":
|
|
{"value":
|
|
"`set_option opt val in tacs` (the tactic) acts like `set_option opt val` at the command level,\nbut it sets the option only within the tactics `tacs`. ",
|
|
"kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 112, "character": 2}}}},
|
|
{"sortText": "6",
|
|
"label": "Lean.Parser.Tactic.unknown",
|
|
"kind": 14,
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 112, "character": 2}}}},
|
|
{"sortText": "7",
|
|
"label": "skip",
|
|
"kind": 14,
|
|
"documentation": {"value": "A docstring ", "kind": "markdown"},
|
|
"data":
|
|
{"params":
|
|
{"textDocument": {"uri": "file:///completionTactics.lean"},
|
|
"position": {"line": 112, "character": 2}}}}],
|
|
"isIncomplete": true}
|