/machines/1RB0LD_0RC1RA_1LD1RC_1LE0RF_---1LA_1LF0LA/LocalBulk.v · raw
(** Uniform bulk composition for
    1RB0LD_0RC1RA_1LD1RC_1LE0RF_---1LA_1LF0LA.
    This is a local transition theorem, not a blank-start nonhalting proof.
    AI assistance: GPT-6 Astra (OpenAI). *)

From BusyCoq Require Import Individual62.
From AstraLocal Require Import LocalRules.
Require Import Lia List.
Open Scope list.

Lemma bulk_left l r n :
  l <* (rev Qblk)^^n <{{A}} r -->* l <{{A}} Pblk^^n *> r.
Proof.
  shift_rule. intros. apply progress_evstep, bulk_left_one.
Qed.

Lemma bulk_right l r n :
  l <* (rev Wguard) {{C}}> Pblk^^n *> r -->*
  l <* (rev Rblk)^^n <* (rev Wguard) {{C}}> r.
Proof.
  shift_rule. intros. apply progress_evstep, bulk_right_one.
Qed.

Lemma guard_rotation n l :
  (rev Rblk)^^n *> (rev Gguard) *> l =
  (rev Gguard) *> (rev Qblk)^^n *> l.
Proof.
  induction n.
  - reflexivity.
  - cbn [lpow]. rewrite !Str_app_assoc. rewrite IHn.
    change ((rev Rblk ++ rev Gguard) *> (rev Qblk)^^n *> l =
            (rev Gguard ++ rev Qblk) *> (rev Qblk)^^n *> l).
    reflexivity.
Qed.

Theorem bulk_roundtrip l r n :
  l <* (rev Gguard) <* (rev Wguard) {{C}}>
    Pblk^^n *> Ttail *> [0;0;0;0;0;0;0;0] *> r -->+
  l <{{A}} Pblk^^(n+2) *> Ttail *> r.
Proof.
  follow bulk_right.
  rewrite guard_rotation.
  follow10 right_reflection.
  follow bulk_left.
  rewrite lpow_add. simpl_tape. finish.
Qed.

Print Assumptions bulk_roundtrip.