induction as
W✝ : Type
M : KripkeModel W✝
a : Program
as : List Program
⊢ ∀ (v w : W✝), relate M (Program.steps (as ++ [a])) v w ↔ ∃ mid, relate M (Program.steps as) v mid ∧ relate M a mid w
case nil
W✝ : Type
M : KripkeModel W✝
a : Program
⊢ ∀ (v w : W✝), relate M (Program.steps ([] ++ [a])) v w ↔ ∃ mid, relate M (Program.steps []) v mid ∧ relate M a mid w

case cons
W✝ : Type
M : KripkeModel W✝
a head✝ : Program
tail✝ : List Program
tail_ih✝ :
  ∀ (v w : W✝),
    relate M (Program.steps (tail✝ ++ [a])) v w ↔ ∃ mid, relate M (Program.steps tail✝) v mid ∧ relate M a mid w
⊢ ∀ (v w : W✝),
    relate M (Program.steps (head✝ :: tail✝ ++ [a])) v w ↔
      ∃ mid, relate M (Program.steps (head✝ :: tail✝)) v mid ∧ relate M a mid w