α : Type u_3
β : Type u_1
γ : Type ?u.77801
σ : Type u_2
inst✝³ : Primcodable α
inst✝² : Primcodable β
inst✝¹ : Primcodable γ
inst✝ : Primcodable σ
f : β →. σ
g : α → β
hf : Partrec f
hg : Computable g
n : ℕ
⊢ (Part.bind (Part.bind ↑(decode n) fun a => Part.some (encode (g a))) fun n =>
      Part.bind ↑(decode n) fun a => Part.map encode (f a)) =
    Part.bind ↑(decode n) fun a => Part.map encode (f (g a))
α : Type u_3
β : Type u_1
γ : Type ?u.77801
σ : Type u_2
inst✝³ : Primcodable α
inst✝² : Primcodable β
inst✝¹ : Primcodable γ
inst✝ : Primcodable σ
f : β →. σ
g : α → β
hf : Partrec f
hg : Computable g
n : ℕ
⊢ (do
      let n ← Part.bind ↑(decode n) fun a => Part.map encode (↑g a)
      Part.bind ↑(decode n) fun a => Part.map encode (f a)) =
    Part.bind ↑(decode n) fun a => Part.map encode ((fun a => f (g a)) a)
simp
no goals
α : Type u_3
β : Type u_1
γ : Type ?u.77801
σ : Type u_2
inst✝³ : Primcodable α
inst✝² : Primcodable β
inst✝¹ : Primcodable γ
inst✝ : Primcodable σ
f : β →. σ
g : α → β
hf : Partrec f
hg : Computable g
n : ℕ
⊢ (Part.bind (Part.bind ↑(decode n) fun a => Part.some (encode (g a))) fun n =>
      Part.bind ↑(decode n) fun a => Part.map encode (f a)) =
    Part.bind ↑(decode n) fun a => Part.map encode (f (g a))
cases' e : decode (α := α) n with a <;> simp [e, encodek]