Zulip Chat Archive
Stream: mathlib4
Topic: implicit arguments in `Set.mem_of_subset_of_mem`
Paige Thomas (May 18 2024 at 01:26):
When I use show_term apply Set.mem_of_subset_of_mem a1 a2
, I get exact Set.mem_of_subset_of_mem a1 a2
, but when I use that, I get
application type mismatch
Set.mem_of_subset_of_mem a1
argument
a1
has type
x :: visited ⊆ dfs_aux g (nexts g x ++ stack) (x :: visited) : Prop
but is expected to have type
?m.66788 ⊆ List.Mem x : Prop
application type mismatch
Set.mem_of_subset_of_mem ?m.66892 a2
argument
a2
has type
x ∈ x :: visited : Prop
but is expected to have type
dfs_aux g (nexts g x ++ stack) (x :: visited) ∈ ?m.66788 : Prop
Is this because the {s₁ : Set α} {s₂ : Set α} {a : α}
in the theorem are implicit?
Lucas Allen (May 18 2024 at 23:05):
For types that aren't metavariables the expression need to match exactly. In the first error the problem is that the expression dfs_aux g (nexts g x ++ stack) (x :: visited)
isn't exactly List.Mem x
. And for the second error the problem is that x
isn't exactly dfs_aux g (nexts g x ++ stack) (x :: visited)
.
You could try using apply Set.mem_of_subset_of_mem
and see what that gives.
Paige Thomas (May 20 2024 at 00:20):
Thank you.
Last updated: May 02 2025 at 03:31 UTC