@@ -156,27 +156,29 @@ theorem rfindOpt_mono {α} {f : ℕ → Option α} (H : ∀ {a m n}, m ≤ n →
156156 have := (H (le_max_left _ _) h).symm.trans (H (le_max_right _ _) hk)
157157 simp at this; simp [this, get_mem]⟩
158158
159- /-- `Partrec f` means that the partial function `f : ℕ →. ℕ` is partially recursive. -/
160- inductive Partrec : (ℕ →. ℕ) → Prop
161- | zero : Partrec (pure 0 )
162- | succ : Partrec succ
163- | left : Partrec ↑fun n : ℕ => n.unpair.1
164- | right : Partrec ↑fun n : ℕ => n.unpair.2
165- | pair {f g} : Partrec f → Partrec g → Partrec fun n => pair <$> f n <*> g n
166- | comp {f g} : Partrec f → Partrec g → Partrec fun n => g n >>= f
167- | prec {f g} : Partrec f → Partrec g → Partrec (unpaired fun a n =>
159+ /-- `Nat. Partrec f` means that the partial function `f : ℕ →. ℕ` is partially recursive. -/
160+ protected inductive Partrec : (ℕ →. ℕ) → Prop
161+ | zero : Nat. Partrec (pure 0 )
162+ | succ : Nat. Partrec succ
163+ | left : Nat. Partrec ↑fun n : ℕ => n.unpair.1
164+ | right : Nat. Partrec ↑fun n : ℕ => n.unpair.2
165+ | pair {f g} : Nat. Partrec f → Nat. Partrec g → Nat. Partrec fun n => pair <$> f n <*> g n
166+ | comp {f g} : Nat. Partrec f → Nat. Partrec g → Nat. Partrec fun n => g n >>= f
167+ | prec {f g} : Nat. Partrec f → Nat. Partrec g → Nat. Partrec (unpaired fun a n =>
168168 n.rec (f a) fun y IH => do let i ← IH; g (pair a (pair y i)))
169- | rfind {f} : Partrec f → Partrec fun a => rfind fun n => (fun m => m = 0 ) <$> f (pair a n)
169+ | rfind {f} : Nat.Partrec f →
170+ Nat.Partrec fun a => rfind fun n => (fun m => m = 0 ) <$> f (pair a n)
170171
171172namespace Partrec
172173
173- theorem of_eq {f g : ℕ →. ℕ} (hf : Partrec f) (H : ∀ n, f n = g n) : Partrec g :=
174+ theorem of_eq {f g : ℕ →. ℕ} (hf : Nat. Partrec f) (H : ∀ n, f n = g n) : Nat. Partrec g :=
174175 (funext H : f = g) ▸ hf
175176
176- theorem of_eq_tot {f : ℕ →. ℕ} {g : ℕ → ℕ} (hf : Partrec f) (H : ∀ n, g n ∈ f n) : Partrec g :=
177+ theorem of_eq_tot {f : ℕ →. ℕ} {g : ℕ → ℕ} (hf : Nat.Partrec f) (H : ∀ n, g n ∈ f n) :
178+ Nat.Partrec g :=
177179 hf.of_eq fun n => eq_some_iff.2 (H n)
178180
179- theorem of_primrec {f : ℕ → ℕ} (hf : Nat.Primrec f) : Partrec f := by
181+ theorem of_primrec {f : ℕ → ℕ} (hf : Nat.Primrec f) : Nat. Partrec f := by
180182 induction hf with
181183 | zero => exact zero
182184 | succ => exact succ
@@ -196,21 +198,21 @@ theorem of_primrec {f : ℕ → ℕ} (hf : Nat.Primrec f) : Partrec f := by
196198 simp only [mem_bind_iff, mem_some_iff]
197199 exact ⟨_, IH, rfl⟩
198200
199- protected theorem some : Partrec some :=
201+ protected theorem some : Nat. Partrec some :=
200202 of_primrec Primrec.id
201203
202- theorem none : Partrec fun _ => none :=
204+ theorem none : Nat. Partrec fun _ => none :=
203205 (of_primrec (Nat.Primrec.const 1 )).rfind.of_eq fun _ =>
204206 eq_none_iff.2 fun _ ⟨h, _⟩ => by simp at h
205207
206- theorem prec' {f g h} (hf : Partrec f) (hg : Partrec g) (hh : Partrec h) :
207- Partrec fun a => (f a).bind fun n => n.rec (g a)
208+ theorem prec' {f g h} (hf : Nat. Partrec f) (hg : Nat. Partrec g) (hh : Nat. Partrec h) :
209+ Nat. Partrec fun a => (f a).bind fun n => n.rec (g a)
208210 fun y IH => do {let i ← IH; h (Nat.pair a (Nat.pair y i))} :=
209211 ((prec hg hh).comp (pair Partrec.some hf)).of_eq fun a =>
210212 ext fun s => by simp [Seq.seq]
211213
212214set_option linter.flexible false in -- TODO: revisit this after #13791 is merged
213- theorem ppred : Partrec fun n => ppred n :=
215+ theorem ppred : Nat. Partrec fun n => ppred n :=
214216 have : Primrec₂ fun n m => if n = Nat.succ m then 0 else 1 :=
215217 (Primrec.ite
216218 (@PrimrecRel.comp _ _ _ _ _ _ _ _ _
0 commit comments