Theorem: HMem.Memory.canonical_congr (HMem/Memory/Canonical.lean)

State before:
v₀ : Bool
lhs₀ rhs₀ t₁ : Tree Bool
hv : Tree.getOrElse 1 (Tree.node v₀ lhs₀ rhs₀) false = Tree.getOrElse 1 t₁ false
hl : canonical (Tree.left (Tree.node v₀ lhs₀ rhs₀)) = canonical (Tree.left t₁)
hr : canonical (Tree.right (Tree.node v₀ lhs₀ rhs₀)) = canonical (Tree.right t₁)
h₀ : canonical (Tree.node v₀ lhs₀ rhs₀) = Tree.nil
h₁ : canonical t₁ = Tree.node (Tree.getOrElse 1 t₁ false) (canonical (Tree.left t₁)) (canonical (Tree.right t₁))
⊢ canonical (Tree.node v₀ lhs₀ rhs₀) = canonical t₁
Tactic:
apply absurd (h₁.symm.trans (canonical_nil
    (hv.symm.trans (canonical_getOrElse.symm.trans (congrArg (λ t ↦ Tree.getOrElse 1 t false) h₀)))
    (hl.symm.trans (canonical_left.trans (congrArg _ h₀)))
    (hr.symm.trans (canonical_right.trans (congrArg _ h₀)))))
  Tree.noConfusion
State after:
no goals