Theorem: Turing.TM1to1.stepAux_move
File: Mathlib/Computability/TuringMachine.lean

tactic: suffices : ∀ i, stepAux ((Stmt.move d^[i]) q) v T = stepAux q v ((Tape.move d^[i]) T)
state_before: Γ : Type u_3
inst✝² : Inhabited Γ
Λ : Type u_2
inst✝¹ : Inhabited Λ
σ : Type u_1
inst✝ : Inhabited σ
n : ℕ
enc : Γ → Vector Bool n
dec : Vector Bool n → Γ
d : Dir
q : Stmt Bool Λ' σ
v : σ
T : Tape Bool
⊢ stepAux (move d q) v T = stepAux q v ((Tape.move d^[n]) T)

tactic: exact this n
state_before: Γ : Type u_3
inst✝² : Inhabited Γ
Λ : Type u_2
inst✝¹ : Inhabited Λ
σ : Type u_1
inst✝ : Inhabited σ
n : ℕ
enc : Γ → Vector Bool n
dec : Vector Bool n → Γ
d : Dir
q : Stmt Bool Λ' σ
v : σ
T : Tape Bool
this : ∀ (i : ℕ), stepAux ((Stmt.move d^[i]) q) v T = stepAux q v ((Tape.move d^[i]) T)
⊢ stepAux (move d q) v T = stepAux q v ((Tape.move d^[n]) T)

case this
Γ : Type u_3
inst✝² : Inhabited Γ
Λ : Type u_2
inst✝¹ : Inhabited Λ
σ : Type u_1
inst✝ : Inhabited σ
n : ℕ
enc : Γ → Vector Bool n
dec : Vector Bool n → Γ
d : Dir
q : Stmt Bool Λ' σ
v : σ
T : Tape Bool
⊢ ∀ (i : ℕ), stepAux ((Stmt.move d^[i]) q) v T = stepAux q v ((Tape.move d^[i]) T)

tactic: intro i
state_before: case this
Γ : Type u_3
inst✝² : Inhabited Γ
Λ : Type u_2
inst✝¹ : Inhabited Λ
σ : Type u_1
inst✝ : Inhabited σ
n : ℕ
enc : Γ → Vector Bool n
dec : Vector Bool n → Γ
d : Dir
q : Stmt Bool Λ' σ
v : σ
T : Tape Bool
⊢ ∀ (i : ℕ), stepAux ((Stmt.move d^[i]) q) v T = stepAux q v ((Tape.move d^[i]) T)

tactic: induction' i with i IH generalizing T
state_before: case this
Γ : Type u_3
inst✝² : Inhabited Γ
Λ : Type u_2
inst✝¹ : Inhabited Λ
σ : Type u_1
inst✝ : Inhabited σ
n : ℕ
enc : Γ → Vector Bool n
dec : Vector Bool n → Γ
d : Dir
q : Stmt Bool Λ' σ
v : σ
T : Tape Bool
i : ℕ
⊢ stepAux ((Stmt.move d^[i]) q) v T = stepAux q v ((Tape.move d^[i]) T)

tactic: rw [iterate_succ', iterate_succ]
state_before: case this.succ
Γ : Type u_3
inst✝² : Inhabited Γ
Λ : Type u_2
inst✝¹ : Inhabited Λ
σ : Type u_1
inst✝ : Inhabited σ
n : ℕ
enc : Γ → Vector Bool n
dec : Vector Bool n → Γ
d : Dir
q : Stmt Bool Λ' σ
v : σ
T✝ : Tape Bool
i : ℕ
IH : ∀ (T : Tape Bool), stepAux ((Stmt.move d^[i]) q) v T = stepAux q v ((Tape.move d^[i]) T)
T : Tape Bool
⊢ stepAux ((Stmt.move d^[Nat.succ i]) q) v T = stepAux q v ((Tape.move d^[Nat.succ i]) T)

tactic: simp only [stepAux, Function.comp_apply]
state_before: case this.succ
Γ : Type u_3
inst✝² : Inhabited Γ
Λ : Type u_2
inst✝¹ : Inhabited Λ
σ : Type u_1
inst✝ : Inhabited σ
n : ℕ
enc : Γ → Vector Bool n
dec : Vector Bool n → Γ
d : Dir
q : Stmt Bool Λ' σ
v : σ
T✝ : Tape Bool
i : ℕ
IH : ∀ (T : Tape Bool), stepAux ((Stmt.move d^[i]) q) v T = stepAux q v ((Tape.move d^[i]) T)
T : Tape Bool
⊢ stepAux ((Stmt.move d ∘ Stmt.move d^[i]) q) v T = stepAux q v ((Tape.move d^[i] ∘ Tape.move d) T)

tactic: rw [IH]
state_before: case this.succ
Γ : Type u_3
inst✝² : Inhabited Γ
Λ : Type u_2
inst✝¹ : Inhabited Λ
σ : Type u_1
inst✝ : Inhabited σ
n : ℕ
enc : Γ → Vector Bool n
dec : Vector Bool n → Γ
d : Dir
q : Stmt Bool Λ' σ
v : σ
T✝ : Tape Bool
i : ℕ
IH : ∀ (T : Tape Bool), stepAux ((Stmt.move d^[i]) q) v T = stepAux q v ((Tape.move d^[i]) T)
T : Tape Bool
⊢ stepAux ((Stmt.move d^[i]) q) v (Tape.move d T) = stepAux q v ((Tape.move d^[i]) (Tape.move d T))

tactic: rfl
state_before: case this.zero
Γ : Type u_3
inst✝² : Inhabited Γ
Λ : Type u_2
inst✝¹ : Inhabited Λ
σ : Type u_1
inst✝ : Inhabited σ
n : ℕ
enc : Γ → Vector Bool n
dec : Vector Bool n → Γ
d : Dir
q : Stmt Bool Λ' σ
v : σ
T✝ T : Tape Bool
⊢ stepAux ((Stmt.move d^[Nat.zero]) q) v T = stepAux q v ((Tape.move d^[Nat.zero]) T)