Theorem: Digraph.Walk.transfer_transfer (GraphProjects/DigraphConnectivity.lean)

State before:
V : Type u
V' : Type v
V'' : Type w
G : Digraph V
G' : Digraph V'
G'' : Digraph V''
u v : V
p : Walk G u v
H : Digraph V
hp : ∀ (e : V × V), e ∈ edges p → e ∈ edgeSet H
K : Digraph V
hp' : ∀ (e : V × V), e ∈ edges (Walk.transfer p H hp) → e ∈ edgeSet K
⊢ Walk.transfer (Walk.transfer p H hp) K hp' = Walk.transfer p K (_ : ∀ (e : V × V), e ∈ edges p → e ∈ edgeSet K)
Tactic:
induction p with
| nil => simp
| cons _ _ ih =>
  simp only [Walk.transfer, cons.injEq, heq_eq_eq, true_and]
  apply ih
State after:
no goals

State before:
case nil
V : Type u
V' : Type v
V'' : Type w
G : Digraph V
G' : Digraph V'
G'' : Digraph V''
u v : V
p : Walk G u v
H K : Digraph V
u✝ : V
hp : ∀ (e : V × V), e ∈ edges nil → e ∈ edgeSet H
hp' : ∀ (e : V × V), e ∈ edges (Walk.transfer nil H hp) → e ∈ edgeSet K
⊢ Walk.transfer (Walk.transfer nil H hp) K hp' = Walk.transfer nil K (_ : ∀ (e : V × V), e ∈ edges nil → e ∈ edgeSet K)
Tactic:
simp
State after:
no goals

State before:
case cons
V : Type u
V' : Type v
V'' : Type w
G : Digraph V
G' : Digraph V'
G'' : Digraph V''
u v : V
p : Walk G u v
H K : Digraph V
u✝ v✝ w✝ : V
h✝ : G.Adj u✝ v✝
p✝ : Walk G v✝ w✝
ih :
  ∀ (hp : ∀ (e : V × V), e ∈ edges p✝ → e ∈ edgeSet H)
    (hp' : ∀ (e : V × V), e ∈ edges (Walk.transfer p✝ H hp) → e ∈ edgeSet K),
    Walk.transfer (Walk.transfer p✝ H hp) K hp' = Walk.transfer p✝ K (_ : ∀ (e : V × V), e ∈ edges p✝ → e ∈ edgeSet K)
hp : ∀ (e : V × V), e ∈ edges (cons h✝ p✝) → e ∈ edgeSet H
hp' : ∀ (e : V × V), e ∈ edges (Walk.transfer (cons h✝ p✝) H hp) → e ∈ edgeSet K
⊢ Walk.transfer (Walk.transfer (cons h✝ p✝) H hp) K hp' =
    Walk.transfer (cons h✝ p✝) K (_ : ∀ (e : V × V), e ∈ edges (cons h✝ p✝) → e ∈ edgeSet K)
Tactic:
simp only [Walk.transfer, cons.injEq, heq_eq_eq, true_and]
State after:
case cons
V : Type u
V' : Type v
V'' : Type w
G : Digraph V
G' : Digraph V'
G'' : Digraph V''
u v : V
p : Walk G u v
H K : Digraph V
u✝ v✝ w✝ : V
h✝ : G.Adj u✝ v✝
p✝ : Walk G v✝ w✝
ih :
  ∀ (hp : ∀ (e : V × V), e ∈ edges p✝ → e ∈ edgeSet H)
    (hp' : ∀ (e : V × V), e ∈ edges (Walk.transfer p✝ H hp) → e ∈ edgeSet K),
    Walk.transfer (Walk.transfer p✝ H hp) K hp' = Walk.transfer p✝ K (_ : ∀ (e : V × V), e ∈ edges p✝ → e ∈ edgeSet K)
hp : ∀ (e : V × V), e ∈ edges (cons h✝ p✝) → e ∈ edgeSet H
hp' : ∀ (e : V × V), e ∈ edges (Walk.transfer (cons h✝ p✝) H hp) → e ∈ edgeSet K
⊢ Walk.transfer (Walk.transfer p✝ H (_ : ∀ (e : V × V), e ∈ edges p✝ → e ∈ edgeSet H)) K
      (_ :
        ∀ (e : V × V),
          e ∈ edges (Walk.transfer p✝ H (_ : ∀ (e : V × V), e ∈ edges p✝ → e ∈ edgeSet H)) → e ∈ edgeSet K) =
    Walk.transfer p✝ K (_ : ∀ (e : V × V), e ∈ edges p✝ → e ∈ edgeSet K)

State before:
case cons
V : Type u
V' : Type v
V'' : Type w
G : Digraph V
G' : Digraph V'
G'' : Digraph V''
u v : V
p : Walk G u v
H K : Digraph V
u✝ v✝ w✝ : V
h✝ : G.Adj u✝ v✝
p✝ : Walk G v✝ w✝
ih :
  ∀ (hp : ∀ (e : V × V), e ∈ edges p✝ → e ∈ edgeSet H)
    (hp' : ∀ (e : V × V), e ∈ edges (Walk.transfer p✝ H hp) → e ∈ edgeSet K),
    Walk.transfer (Walk.transfer p✝ H hp) K hp' = Walk.transfer p✝ K (_ : ∀ (e : V × V), e ∈ edges p✝ → e ∈ edgeSet K)
hp : ∀ (e : V × V), e ∈ edges (cons h✝ p✝) → e ∈ edgeSet H
hp' : ∀ (e : V × V), e ∈ edges (Walk.transfer (cons h✝ p✝) H hp) → e ∈ edgeSet K
⊢ Walk.transfer (Walk.transfer p✝ H (_ : ∀ (e : V × V), e ∈ edges p✝ → e ∈ edgeSet H)) K
      (_ :
        ∀ (e : V × V),
          e ∈ edges (Walk.transfer p✝ H (_ : ∀ (e : V × V), e ∈ edges p✝ → e ∈ edgeSet H)) → e ∈ edgeSet K) =
    Walk.transfer p✝ K (_ : ∀ (e : V × V), e ∈ edges p✝ → e ∈ edgeSet K)
Tactic:
apply ih
State after:
no goals