concurrent_step_cases: fixes memop_step :: "instr list \<times> (nat \<Rightarrow> nat option) \<times> 'b \<times> (nat \<Rightarrow> nat) \<times> 'c \<times> 'd \<times> 'e \<times> 'f \<Rightarrow> instr list \<times> (nat \<Rightarrow> nat option) \<times> 'b \<times> (nat \<Rightarrow> nat) \<times> 'c \<times> 'd \<times> 'e \<times> 'f \<Rightarrow> bool"   and storebuffer_step :: "(nat \<Rightarrow> nat) \<times> 'b \<times> 'd \<times> 'e \<times> 'f \<Rightarrow> (nat \<Rightarrow> nat) \<times> 'b \<times> 'd \<times> 'e \<times> 'f \<Rightarrow> bool"   and program_step :: "(nat \<Rightarrow> nat option) \<Rightarrow> 'g \<Rightarrow> 'g \<times> instr list \<Rightarrow> bool"   and "record" :: "'g \<Rightarrow> 'g \<Rightarrow> instr list \<Rightarrow> 'b \<Rightarrow> 'b"   and a1 :: "('g \<times> instr list \<times> (nat \<Rightarrow> nat option) \<times> 'b \<times> 'c \<times> 'd \<times> 'e) list \<times> (nat \<Rightarrow> nat) \<times> 'f"   and a2 :: "('g \<times> instr list \<times> (nat \<Rightarrow> nat option) \<times> 'b \<times> 'c \<times> 'd \<times> 'e) list \<times> (nat \<Rightarrow> nat) \<times> 'f" assumes "computation.concurrent_step memop_step storebuffer_step program_step record a1 a2" obtains i :: "nat" and ts :: "('g \<times> instr list \<times> (nat \<Rightarrow> nat option) \<times> 'b \<times> 'c \<times> 'd \<times> 'e) list" and p :: "'g" and "is" :: "instr list" and \<theta> :: "nat \<Rightarrow> nat option" and sb :: "'b" and \<D> :: "'c" and \<O> :: "'d" and \<R> :: "'e" and p' :: "'g" and is' :: "instr list" and m :: "nat \<Rightarrow> nat" and \<S> :: "'f" where "a1 = (tsa__, ma__, \<S>'__)" and "a2 = (tsa__[i__ := (p', is__ @ is'__, \<theta>__, record p__ p' is'__ sb__, \<D>__, \<O>__, \<R>__)], ma__, \<S>'__)" and "i__ < length tsa__" and "tsa__ ! i__ = (p__, is__, \<theta>__, sb__, \<D>__, \<O>__, \<R>__)" and "program_step \<theta>__ p__ (p', is'__)"   | i :: "nat" and ts :: "('g \<times> instr list \<times> (nat \<Rightarrow> nat option) \<times> 'b \<times> 'c \<times> 'd \<times> 'e) list" and p :: "'g" and "is" :: "instr list" and \<theta> :: "nat \<Rightarrow> nat option" and sb :: "'b" and \<D> :: "'c" and \<O> :: "'d" and \<R> :: "'e" and m :: "nat \<Rightarrow> nat" and \<S> :: "'f" and is' :: "instr list" and \<theta>' :: "nat \<Rightarrow> nat option" and sb' :: "'b" and m' :: "nat \<Rightarrow> nat" and \<D>' :: "'c" and \<O>' :: "'d" and \<R>' :: "'e" and \<S>' :: "'f" where "a1 = (tsb__, mb__, \<S>''__)" and "a2 = (tsb__[ia__ := (pa__, is', \<theta>', sb'__, \<D>', \<O>''__, \<R>''__)], m'__, \<S>'''__)" and "ia__ < length tsb__" and "tsb__ ! ia__ = (pa__, isa__, \<theta>'__, sba__, \<D>'__, \<O>'__, \<R>'__)" and "memop_step (isa__, \<theta>'__, sba__, mb__, \<D>'__, \<O>'__, \<R>'__, \<S>''__) (is', \<theta>', sb'__, m'__, \<D>', \<O>''__, \<R>''__, \<S>'''__)"   | i :: "nat" and ts :: "('g \<times> instr list \<times> (nat \<Rightarrow> nat option) \<times> 'b \<times> 'c \<times> 'd \<times> 'e) list" and p :: "'g" and "is" :: "instr list" and \<theta> :: "nat \<Rightarrow> nat option" and sb :: "'b" and \<D> :: "'c" and \<O> :: "'d" and \<R> :: "'e" and m :: "nat \<Rightarrow> nat" and \<S> :: "'f" and m' :: "nat \<Rightarrow> nat" and sb' :: "'b" and \<O>' :: "'d" and \<R>' :: "'e" and \<S>' :: "'f" where "a1 = (ts, m, \<S>)" and "a2 = (ts[i := (p, is, \<theta>, sb', \<D>, \<O>', \<R>')], m', \<S>')" and "i < length ts" and "ts ! i = (p, is, \<theta>, sb, \<D>, \<O>, \<R>)" and "storebuffer_step (m, sb, \<O>, \<R>, \<S>) (m', sb', \<O>', \<R>', \<S>')"