simp at *
case mpr
W✝ : Type
M : KripkeModel W✝
bs : List Program
a : Program
as : List Program
IH :
  ∀ (x z : W✝),
    relate M (Program.steps (as ++ bs)) x z ↔ ∃ y, relate M (Program.steps as) x y ∧ relate M (Program.steps bs) y z
x z : W✝
rhs : ∃ y, relate M (Program.steps (a :: as)) x y ∧ relate M (Program.steps bs) y z
⊢ relate M (Program.steps (a :: as ++ bs)) x z
case mpr
W✝ : Type
M : KripkeModel W✝
bs : List Program
a : Program
as : List Program
IH :
  ∀ (x z : W✝),
    relate M (Program.steps (as ++ bs)) x z ↔ ∃ y, relate M (Program.steps as) x y ∧ relate M (Program.steps bs) y z
x z : W✝
rhs : ∃ y, (∃ y_1, relate M a x y_1 ∧ relate M (Program.steps as) y_1 y) ∧ relate M (Program.steps bs) y z
⊢ ∃ y, relate M a x y ∧ relate M (Program.steps (as ++ bs)) y z