Fact fractran_step_no_zero_num l : Forall (fun c => fst c <> 0) l -> forall x y, l // x → y -> y = 0 -> x = 0.
Fact fractran_rt_no_zero_den l n y : fractran_regular l -> fractran_steps l n 0 y -> y = 0.
Fact fractran_rt_no_zero_num l : Forall (fun c => fst c <> 0) l -> forall n x, fractran_steps l n x 0 -> x = 0.
Fact fractran_zero_num l x : Exists (fun c => fst c = 0) l -> exists y, l // x → y.

(* Specifications: *)
Corollary FRACTRAN_HALTING_0_num l x : Exists (fun c => fst c = 0) l -> FRACTRAN_HALTING (l,x) <-> False.
Lemma fractran_step_zero l : Forall (fun c => fst c <> 0) l -> forall x y, x <> 0 -> l // x → y <-> remove_zero_den l // x → y.
Lemma fractran_rt_no_zero_den_0_0 l :
l <> nil -> fractran_regular l -> fractran_step l 0 0.
Corollary FRACTRAN_HALTING_l_0_no_zero_den l :
l <> nil -> fractran_regular l -> FRACTRAN_HALTING (l,0) <-> False.
Lemma FRACTRAN_HALTING_nil_x x : FRACTRAN_HALTING (nil,x) <-> True.
Lemma FRACTRAN_HALTING_l_1_no_zero_den l x :
l <> nil
-> x <> 0
-> Forall (fun c => fst c <> 0) l
-> FRACTRAN_HALTING (l,x) <-> FRACTRAN_HALTING (remove_zero_den l,x).
Lemma FRACTRAN_HALTING_hard p l :
p <> 0
-> FRACTRAN_HALTING ((p,0)::l,0)
<-> exists x, x <> 0 /\ FRACTRAN_HALTING ((p,0)::l,x).