Zulip Chat Archive
Stream: new members
Topic: SetLike docs using Lean 3 or 4 syntax?
Martin C. Martin (Oct 26 2023 at 18:47):
Mathlib4's SetLike/Basic.lean contains this example usage in a comment:
instance : SetLike (MySubobject X) X :=
⟨MySubobject.carrier, λ p q h, by cases p; cases q; congr'⟩
Is that proper Lean 4 syntax? OneShot translated my equivalent to:
⟨MySubobject.carrier, fun p q h => by cases p <;> cases q <;> congr⟩
Which is correct?
Ruben Van de Velde (Oct 26 2023 at 19:16):
Most likely you'll get a warning that the <;> is unnecessary (though it will work)
Ruben Van de Velde (Oct 26 2023 at 19:17):
<;> and ; are only different if the tactic before it created multiple goals, which I'm guessing cases doesn't do in this case
Kyle Miller (Oct 26 2023 at 19:34):
Lean 3's ; is Lean 4's <;>, but I think the Lean 3 should have been written as by { cases p, cases q, congr' } (too frequently people used ; to avoid needing to reach for the braces)
Kyle Miller (Oct 26 2023 at 19:35):
I think the Lean 4 could be by cases p; cases q; congr! since p and q are structures, and since congr! is the analogue of congr' (it might make a difference if the structures have things like Decidable fields)
Anne Baanen (Oct 27 2023 at 14:06):
I tested Kyle's suggestion on Subgroup and that worked. So: #7986.
Last updated: May 02 2025 at 03:31 UTC