Require Import List Bool.

From Undecidability.Synthetic
  Require Import Definitions ReducibilityFacts.

From Undecidability.Shared.Libs.DLW
  Require Import pos vec sss compiler_correction.

From Undecidability.TM
  Require Import PCTM.

From Undecidability.StackMachines
  Require Import bsm_defs bsm_pctm BSM_sss.

Set Implicit Arguments.

Theorem reduction : PCTM_HALT BSMn_HALTING 2.
Proof.
  apply reduces_dependent; exists.
  intros (P,((l,b),r)).
  set (Q := gc_code pctm_bsm2_compiler (1,P) 1).
  set (w1 := l##(b::r)##vec_nil).
  exists (existT _ 1 (existT _ Q w1)); simpl.
  apply compiler_t_term_equiv; split; auto.
Qed.