induction ids generalizing rtr o <;> simp_all [go]
α : Type
inst✝¹ : Accessible α
rtr : α
inst✝ : Finite α
i : ID
cpt : Component.Valued
ids : List ID
c : Component.Valued
o : Component.type α (Component.val c)
vs : ID ⇀ Value
ho : rtr[Component.val c][i] = some o
h : c ≠ cpt ∨ i ∉ ids ∨ vs i = none
⊢ go rtr cpt vs ids[Component.val c][i] = some o
case cons
α : Type
inst✝¹ : Accessible α
inst✝ : Finite α
i : ID
cpt c : Component.Valued
vs : ID ⇀ Value
head✝ : ID
tail✝ : List ID
rtr : α
o : Component.type α (Component.val c)
tail_ih✝ :
  ∀ {rtr : α} {o : Component.type α (Component.val c)},
    rtr[Component.val c][i] = some o →
      ¬c = cpt ∨ i ∉ tail✝ ∨ vs i = none → go rtr cpt vs tail✝[Component.val c][i] = some o
ho : rtr[Component.val c][i] = some o
h : ¬c = cpt ∨ ¬(i = head✝ ∨ i ∈ tail✝) ∨ vs i = none
⊢ (match vs head✝ with
      | none => go rtr cpt vs tail✝
      | some v => go (update rtr cpt head✝ v) cpt vs tail✝)[Component.val c][i] =
    some o