α : Type u_1
β : Type u_2
γ : Type ?u.52270
σ : Type u_3
inst✝³ : Primcodable α
inst✝² : Primcodable β
inst✝¹ : Primcodable γ
inst✝ : Primcodable σ
f : α →. β
g : α → β →. σ
hf : Partrec f
hg : Partrec₂ g
n : ℕ
⊢ (Part.bind (Part.bind ↑(decode n) fun y => map (Nat.pair n) (map encode (f y))) fun n =>
      Part.bind ↑(Option.bind (decode (Nat.unpair n).fst) fun a => Option.map (Prod.mk a) (decode (Nat.unpair n).snd))
        fun a => map encode (g a.fst a.snd)) =
    Part.bind ↑(decode n) fun a => Part.bind (f a) fun y => map encode (g a y)
α : Type u_1
β : Type u_2
γ : Type ?u.52270
σ : Type u_3
inst✝³ : Primcodable α
inst✝² : Primcodable β
inst✝¹ : Primcodable γ
inst✝ : Primcodable σ
f : α →. β
g : α → β →. σ
hf : Partrec f
hg : Partrec₂ g
n : ℕ
⊢ (do
      let n ← Seq.seq (Nat.pair <$> Part.some n) fun x => Part.bind ↑(decode n) fun a => map encode (f a)
      Part.bind ↑(decode n) fun a => map encode ((fun p => g p.fst p.snd) a)) =
    Part.bind ↑(decode n) fun a => map encode ((fun a => Part.bind (f a) (g a)) a)
simp [Seq.seq]
no goals
α : Type u_1
β : Type u_2
γ : Type ?u.52270
σ : Type u_3
inst✝³ : Primcodable α
inst✝² : Primcodable β
inst✝¹ : Primcodable γ
inst✝ : Primcodable σ
f : α →. β
g : α → β →. σ
hf : Partrec f
hg : Partrec₂ g
n : ℕ
⊢ (Part.bind (Part.bind ↑(decode n) fun y => map (Nat.pair n) (map encode (f y))) fun n =>
      Part.bind ↑(Option.bind (decode (Nat.unpair n).fst) fun a => Option.map (Prod.mk a) (decode (Nat.unpair n).snd))
        fun a => map encode (g a.fst a.snd)) =
    Part.bind ↑(decode n) fun a => Part.bind (f a) fun y => map encode (g a y)
cases' e : decode (α := α) n with a <;> simp [e, encodek]