Zulip Chat Archive
Stream: new members
Topic: Rules for pattern matching in lambda expression
Martin C. Martin (Feb 11 2023 at 14:15):
In
import data.set.lattice
variable {α : Type*}
variables (s t : set α)
example : ∀ x, x ∈ s ∪ s ∩ t → x ∈ s :=
λ x h, sorry
Is there a way to replace h with something to match the disjunction? I tried ⟨h, h'⟩ and ⟨h | h'⟩ but neither works. Is this because lambdas follow the rules for intros rather than rintros, i.e. they don't do recursive matching? Why not? In other words, why not allow recursive matching everywhere that non-recursive matching is allowed? Why have intros at all, and not just rintros?
Kevin Buzzard (Feb 11 2023 at 14:20):
(h | h'). I agree about rintros but you can't just change core lean!
Mario Carneiro (Feb 11 2023 at 14:27):
lambda does recursive matching, but it does not use the same syntax as rintro
Mario Carneiro (Feb 11 2023 at 14:28):
you have to use actual terms as patterns rather than this | stuff
Martin C. Martin (Feb 11 2023 at 14:28):
Good afternoon Kevin. That fails for me too. At the pipe it says invalid declaration, ')' expected.
import data.set.lattice
variable {α : Type*}
variables (s t : set α)
example : ∀ x, x ∈ s ∪ s ∩ t → x ∈ s :=
λ x (h | h'), sorry
Mario Carneiro (Feb 11 2023 at 14:29):
to write a pattern using | you should write it like
fun
| x, .inl h => sorry
| x, .inr h => sorry
or
fun | x, .inl h | x, .inr h => sorry
if both branches are the same
Mario Carneiro (Feb 11 2023 at 14:29):
the syntax Kevin is suggesting is by rintro x (h | h')
Mario Carneiro (Feb 11 2023 at 14:31):
oh this is lean 3
Mario Carneiro (Feb 11 2023 at 14:31):
in lean 3 there is no pattern matching syntax for lambda with multiple alternatives, you have to use
λ x h, match h with
| or.inl h := sorry
| or.inr h := sorry
end
Mario Carneiro (Feb 11 2023 at 14:32):
and in this case rintro (which is also available in lean 3) is the clear winner
Martin C. Martin (Feb 11 2023 at 14:37):
Thanks Mario!
Last updated: May 02 2025 at 03:31 UTC