lean4-htt/tests/lean/interactive/plainGoal.lean.expected.out
Kyle Miller af5322c7ef
feat: tactic info per intro hypothesis, rfl pattern (#9942)
This PR modifies `intro` to create tactic info localized to each
hypothesis, making it possible to see how `intro` works
variable-by-variable. Additionally:
- The tactic supports `intro rfl` to introduce an equality and
immediately substitute it, like `rintro rfl` (recall: the `rfl` pattern
is like doing `intro h; subst h`). The `rintro` tactic can also now
support `HEq` in `rfl` patterns if `eq_of_heq` applies.
- In `intro (h : t)`, elaboration of `t` is interleaved with unification
with the type of `h`, which prevents default instances from causing
unification to fail.
- Tactics that change types of hypotheses (including `intro (h : t)`,
`delta`, `dsimp`) now update the local instance cache.

In `intro x y z`, tactic info ranges are `intro x`, `y`, and `z`. The
reason for including `intro` with `x` is to make sure the info range is
"monotonic" while adding the first argument to `intro`.
2025-08-18 13:55:06 +00:00

187 lines
10 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 0, "character": 20}}
{"rendered": "```lean\nα : Sort ?u\n⊢ αα\n```",
"goals": ["α : Sort ?u\n⊢ αα"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 0, "character": 21}}
{"rendered": "```lean\nα : Sort ?u\n⊢ αα\n```",
"goals": ["α : Sort ?u\n⊢ αα"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 3, "character": 2}}
{"rendered": "```lean\nα : Sort ?u\n⊢ αα\n```",
"goals": ["α : Sort ?u\n⊢ αα"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 3, "character": 3}}
{"rendered": "```lean\nα : Sort ?u\na : α\n⊢ α\n```",
"goals": ["α : Sort ?u\na : α\n⊢ α"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 7, "character": 3}}
{"rendered": "```lean\nα : Sort ?u\na : α\n⊢ α\n```",
"goals": ["α : Sort ?u\na : α\n⊢ α"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 10, "character": 20}}
{"rendered": "```lean\nα : Sort ?u\n⊢ αα\n```",
"goals": ["α : Sort ?u\n⊢ αα"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 15, "character": 9}}
{"rendered": "```lean\ncase zero\n⊢ 0 + 0 = 0\n```",
"goals": ["case zero\n⊢ 0 + 0 = 0"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 17, "character": 5}}
{"rendered":
"```lean\ncase succ\nn✝ : Nat\na✝ : 0 + n✝ = n✝\n⊢ 0 + (n✝ + 1) = n✝ + 1\n```",
"goals": ["case succ\nn✝ : Nat\na✝ : 0 + n✝ = n✝\n⊢ 0 + (n✝ + 1) = n✝ + 1"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 21, "character": 9}}
{"rendered": "```lean\nα : Sort ?u\na : α\n⊢ α\n```",
"goals": ["α : Sort ?u\na : α\n⊢ α"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 21, "character": 10}}
{"rendered": "```lean\nα : Sort ?u\na : α\n⊢ α\n```",
"goals": ["α : Sort ?u\na : α\n⊢ α"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 21, "character": 11}}
{"rendered": "```lean\nα : Sort ?u\na : α\n⊢ α\n```",
"goals": ["α : Sort ?u\na : α\n⊢ α"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 27, "character": 3}}
{"rendered": "```lean\nn m : Nat\nh1 : n = m\nh2 : m = 0\n⊢ 0 = n\n```",
"goals": ["n m : Nat\nh1 : n = m\nh2 : m = 0\n⊢ 0 = n"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 27, "character": 9}}
{"rendered": "```lean\nn m : Nat\nh1 : n = m\nh2 : m = 0\n⊢ 0 = m\n```",
"goals": ["n m : Nat\nh1 : n = m\nh2 : m = 0\n⊢ 0 = m"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 27, "character": 13}}
{"rendered": "no goals", "goals": []}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 34, "character": 3}}
{"rendered": "```lean\ncase zero\n⊢ 0 + 0 = 0\n```",
"goals": ["case zero\n⊢ 0 + 0 = 0"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 40, "character": 3}}
{"rendered":
"```lean\ncase zero\n⊢ 0 + 0 = 0\n```\n---\n```lean\ncase succ\nn✝ : Nat\na✝ : 0 + n✝ = n✝\n⊢ 0 + (n✝ + 1) = n✝ + 1\n```",
"goals":
["case zero\n⊢ 0 + 0 = 0",
"case succ\nn✝ : Nat\na✝ : 0 + n✝ = n✝\n⊢ 0 + (n✝ + 1) = n✝ + 1"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 44, "character": 3}}
{"rendered":
"```lean\ncase zero\n⊢ 0 + 0 = 0\n```\n---\n```lean\ncase succ\nn✝ : Nat\n⊢ 0 + (n✝ + 1) = n✝ + 1\n```",
"goals":
["case zero\n⊢ 0 + 0 = 0", "case succ\nn✝ : Nat\n⊢ 0 + (n✝ + 1) = n✝ + 1"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 48, "character": 3}}
{"rendered": "```lean\na : Nat\n⊢ ∀ (b : Nat), a = b\n```",
"goals": ["a : Nat\n⊢ ∀ (b : Nat), a = b"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 48, "character": 11}}
{"rendered": "```lean\na b : Nat\n⊢ a = b\n```",
"goals": ["a b : Nat\n⊢ a = b"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 52, "character": 20}}
{"rendered": "```lean\nα : Sort ?u\n⊢ αα\n```",
"goals": ["α : Sort ?u\n⊢ αα"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 56, "character": 3}}
{"rendered":
"```lean\nα : Sort u_1\np : α → Prop\na b : α\ninst✝ : DecidablePred p\nh : ∀ {p : α → Prop} [DecidablePred p], p a → p b\n⊢ p a\n```",
"goals":
["α : Sort u_1\np : α → Prop\na b : α\ninst✝ : DecidablePred p\nh : ∀ {p : α → Prop} [DecidablePred p], p a → p b\n⊢ p a"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 62, "character": 3}}
{"rendered": "```lean\ncase left\n⊢ True\n```", "goals": ["case left\n⊢ True"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 64, "character": 3}}
{"rendered": "```lean\ncase right\n⊢ False\n```",
"goals": ["case right\n⊢ False"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 69, "character": 3}}
{"rendered": "```lean\ncase left\n⊢ True\n```", "goals": ["case left\n⊢ True"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 71, "character": 3}}
{"rendered": "```lean\ncase right\n⊢ False\n```",
"goals": ["case right\n⊢ False"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 79, "character": 29}}
{"rendered":
"```lean\nt a n✝ : Nat\na✝ : t * (a + n✝) = t * a + t * n✝\n⊢ t * (a + n✝) + t = t * a + t * (n✝ + 1)\n```\n---\n```lean\nt a n✝ : Nat\na✝ : t * (a + n✝) = t * a + t * n✝\n⊢ t * (a + n✝) + t = t * a + (t * n✝ + t)\n```\n---\n```lean\nt a n✝ : Nat\na✝ : t * (a + n✝) = t * a + t * n✝\n⊢ t * (a + n✝) + t = t * a + (t * n✝ + t)\n```",
"goals":
["t a n✝ : Nat\na✝ : t * (a + n✝) = t * a + t * n✝\n⊢ t * (a + n✝) + t = t * a + t * (n✝ + 1)",
"t a n✝ : Nat\na✝ : t * (a + n✝) = t * a + t * n✝\n⊢ t * (a + n✝) + t = t * a + (t * n✝ + t)",
"t a n✝ : Nat\na✝ : t * (a + n✝) = t * a + t * n✝\n⊢ t * (a + n✝) + t = t * a + (t * n✝ + t)"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 83, "character": 53}}
{"rendered":
"```lean\ncase nil\nα : Type u_1\nbs cs : List α\n⊢ [] ++ bs ++ cs = [] ++ (bs ++ cs)\n```",
"goals":
["case nil\nα : Type u_1\nbs cs : List α\n⊢ [] ++ bs ++ cs = [] ++ (bs ++ cs)"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 83, "character": 54}}
{"rendered":
"```lean\ncase nil\nα : Type u_1\nbs cs : List α\n⊢ [] ++ bs ++ cs = [] ++ (bs ++ cs)\n```",
"goals":
["case nil\nα : Type u_1\nbs cs : List α\n⊢ [] ++ bs ++ cs = [] ++ (bs ++ cs)"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 87, "character": 38}}
{"rendered": "no goals", "goals": []}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 90, "character": 39}}
null
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 94, "character": 16}}
{"rendered":
"```lean\ncase left\n⊢ True\n```\n---\n```lean\ncase right\n⊢ False\n```",
"goals": ["case left\n⊢ True", "case right\n⊢ False"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 98, "character": 8}}
{"rendered": "```lean\n| True = True\n```", "goals": ["| True = True"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 100, "character": 4}}
{"rendered": "```lean\n| True = True\n```", "goals": ["| True = True"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 102, "character": 2}}
{"rendered": "no goals", "goals": []}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 107, "character": 4}}
{"rendered": "```lean\n⊢ True\n```", "goals": ["⊢ True"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 109, "character": 2}}
{"rendered": "```lean\n⊢ True\n```", "goals": ["⊢ True"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 114, "character": 4}}
{"rendered": "```lean\n⊢ True\n```", "goals": ["⊢ True"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 116, "character": 2}}
null
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 121, "character": 2}}
{"rendered": "```lean\n⊢ False\n```", "goals": ["⊢ False"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 125, "character": 17}}
{"rendered": "```lean\np q : Prop\nhp : p\nhq : q\nthis : q ∧ p\n⊢ p ∧ q\n```",
"goals": ["p q : Prop\nhp : p\nhq : q\nthis : q ∧ p\n⊢ p ∧ q"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 129, "character": 18}}
{"rendered": "```lean\np q : Prop\nhp : p\nhq : q\n⊢ id (p ∧ q)\n```",
"goals": ["p q : Prop\nhp : p\nhq : q\n⊢ id (p ∧ q)"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 134, "character": 3}}
{"rendered": "```lean\ncase left\n⊢ True\n```", "goals": ["case left\n⊢ True"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 134, "character": 4}}
{"rendered": "```lean\ncase left\n⊢ True\n```", "goals": ["case left\n⊢ True"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 140, "character": 34}}
{"rendered":
"```lean\ncase zero\n⊢ True\n```\n---\n```lean\ncase succ\nn✝ : Nat\na✝ : True\n⊢ True\n```",
"goals": ["case zero\n⊢ True", "case succ\nn✝ : Nat\na✝ : True\n⊢ True"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 143, "character": 34}}
{"rendered":
"```lean\ncase zero\n⊢ True\n```\n---\n```lean\ncase succ\nn✝ : Nat\na✝ : True\n⊢ True\n```",
"goals": ["case zero\n⊢ True", "case succ\nn✝ : Nat\na✝ : True\n⊢ True"]}
{"textDocument": {"uri": "file:///plainGoal.lean"},
"position": {"line": 146, "character": 34}}
{"rendered": "```lean\nx✝ : Nat\n⊢ True\n```", "goals": ["x✝ : Nat\n⊢ True"]}