Zulip Chat Archive
Stream: new members
Topic: term extraction
Arthur Paulino (Nov 07 2021 at 20:14):
How do I turn
h: ∀ (w w' : V), M.adj v w ∧ M.adj v w' → w = w'
into
w: V
w': V
h: M.adj v w ∧ M.adj v w' → w = w'
?
Kyle Miller (Nov 07 2021 at 20:15):
You can't unless you happen to have two vertices w
and w'
on hand. If you do have them, you could do specialize h w w'
.
Alex J. Best (Nov 07 2021 at 20:16):
If h is a hypothesis you can't do this, for instance if V
was false
you'd be able to turn false -> true
into a proof of false.
Arthur Paulino (Nov 07 2021 at 20:21):
Can I use hu: rel.dom M.adj = set.univ
to make this possible?
Ruben Van de Velde (Nov 07 2021 at 20:26):
Can you share a #mwe ?
Arthur Paulino (Nov 07 2021 at 20:30):
Sure
import combinatorics.simple_graph.subgraph
open finset
universe u
namespace simple_graph
variables {V : Type u} {G : simple_graph V} (M : subgraph G)
def is_matching : Prop := ∀ (v w w': V), M.adj v w ∧ M.adj v w' → w = w'
def is_perfect : Prop := is_matching M ∧ M.support = set.univ
lemma is_perfect_iff :
is_perfect M ↔ ∀ (v : V), ∃! (w : V), M.adj v w :=
begin
simp only [is_matching, is_perfect, subgraph.support, exists_unique],
split,
{ intros h v,
cases h with h hu,
specialize h v,
sorry,},
{ intro h,
split,
{ intros v w w' hv,
specialize h v,
cases hv with hw hw',
cases h with x h,
cases h with _ hy,
have hxw := hy w hw,
have hxw' := hy w' hw',
simp [hxw, hxw'], },
{ sorry, }, },
end
end simple_graph
I'm trying to clear that first sorry
Arthur Paulino (Nov 07 2021 at 20:33):
Both h
and hu
that I mentioned will be available after the line specialize h v,
(right before sorry
)
Kyle Miller (Nov 07 2021 at 20:49):
Did you define subgraph.support
?
Kyle Miller (Nov 07 2021 at 20:55):
I'm guessing it's this (for M : G.subgraph
):
def subgraph.support : set V := rel.dom M.adj
lemma subgraph.mem_support {v : V} : v ∈ M.support ↔ ∃ w, M.adj v w := iff.rfl
In that case, here's the first sorry:
lemma is_perfect_iff :
is_perfect M ↔ ∀ (v : V), ∃! (w : V), M.adj v w :=
begin
simp only [is_matching, is_perfect, exists_unique],
split,
{ intros h v,
cases h with h hu,
have hu' := set.mem_univ v,
rw [←hu, subgraph.mem_support] at hu',
cases hu' with w hw,
use [w, hw],
intros u hu,
exact h _ _ _ ⟨hu, hw⟩, },
{ sorry },
end
Kyle Miller (Nov 07 2021 at 20:56):
and I would suggest this for is_matching
:
def is_matching : Prop := ∀ {v w w': V}, M.adj v w → M.adj v w' → w = w'
Last updated: Dec 20 2023 at 11:08 UTC