Theorem: Turing.TM1.stmts₁_supportsStmt_mono
File: Mathlib/Computability/TuringMachine.lean

tactic: induction' q₂ with _ q IH _ q IH _ q IH <;>
  simp only [stmts₁, SupportsStmt, Finset.mem_insert, Finset.mem_union, Finset.mem_singleton]
    at h hs
state_before: Γ : Type u_2
inst✝ : Inhabited Γ
Λ : Type u_1
σ : Type u_3
S : Finset Λ
q₁ q₂ : Stmt₁
h : q₁ ∈ stmts₁ q₂
hs : SupportsStmt S q₂
⊢ SupportsStmt S q₁

tactic: iterate 3 rcases h with (rfl | h) <;> [exact hs; exact IH h hs]
state_before: case move
Γ : Type u_2
inst✝ : Inhabited Γ
Λ : Type u_1
σ : Type u_3
S : Finset Λ
q₁ q₂ : Stmt₁
h✝ : q₁ ∈ stmts₁ q₂
hs✝ : SupportsStmt S q₂
a✝ : Dir
q : Stmt₁
IH : q₁ ∈ stmts₁ q → SupportsStmt S q → SupportsStmt S q₁
hs : SupportsStmt S q
h : q₁ = move a✝ q ∨ q₁ ∈ stmts₁ q
⊢ SupportsStmt S q₁

case write
Γ : Type u_2
inst✝ : Inhabited Γ
Λ : Type u_1
σ : Type u_3
S : Finset Λ
q₁ q₂ : Stmt₁
h✝ : q₁ ∈ stmts₁ q₂
hs✝ : SupportsStmt S q₂
a✝ : Γ → σ → Γ
q : Stmt₁
IH : q₁ ∈ stmts₁ q → SupportsStmt S q → SupportsStmt S q₁
hs : SupportsStmt S q
h : q₁ = write a✝ q ∨ q₁ ∈ stmts₁ q
⊢ SupportsStmt S q₁

case load
Γ : Type u_2
inst✝ : Inhabited Γ
Λ : Type u_1
σ : Type u_3
S : Finset Λ
q₁ q₂ : Stmt₁
h✝ : q₁ ∈ stmts₁ q₂
hs✝ : SupportsStmt S q₂
a✝ : Γ → σ → σ
q : Stmt₁
IH : q₁ ∈ stmts₁ q → SupportsStmt S q → SupportsStmt S q₁
hs : SupportsStmt S q
h : q₁ = load a✝ q ∨ q₁ ∈ stmts₁ q
⊢ SupportsStmt S q₁

case branch
Γ : Type u_2
inst✝ : Inhabited Γ
Λ : Type u_1
σ : Type u_3
S : Finset Λ
q₁ q₂ : Stmt₁
h✝ : q₁ ∈ stmts₁ q₂
hs✝ : SupportsStmt S q₂
a✝² : Γ → σ → Bool
a✝¹ a✝ : Stmt₁
a_ih✝¹ : q₁ ∈ stmts₁ a✝¹ → SupportsStmt S a✝¹ → SupportsStmt S q₁
a_ih✝ : q₁ ∈ stmts₁ a✝ → SupportsStmt S a✝ → SupportsStmt S q₁
hs : SupportsStmt S a✝¹ ∧ SupportsStmt S a✝
h : q₁ = branch a✝² a✝¹ a✝ ∨ q₁ ∈ stmts₁ a✝¹ ∨ q₁ ∈ stmts₁ a✝
⊢ SupportsStmt S q₁

case goto
Γ : Type u_2
inst✝ : Inhabited Γ
Λ : Type u_1
σ : Type u_3
S : Finset Λ
q₁ q₂ : Stmt₁
h✝ : q₁ ∈ stmts₁ q₂
hs✝ : SupportsStmt S q₂
a✝ : Γ → σ → Λ
hs : ∀ (a : Γ) (v : σ), a✝ a v ∈ S
h : q₁ = goto a✝
⊢ SupportsStmt S q₁

case halt
Γ : Type u_2
inst✝ : Inhabited Γ
Λ : Type u_1
σ : Type u_3
S : Finset Λ
q₁ q₂ : Stmt₁
h✝ : q₁ ∈ stmts₁ q₂
hs✝ : SupportsStmt S q₂
hs : True
h : q₁ = halt
⊢ SupportsStmt S q₁

tactic: case branch p q₁ q₂ IH₁ IH₂ => rcases h with (rfl | h | h); exacts [hs, IH₁ h hs.1, IH₂ h hs.2]
state_before: case branch
Γ : Type u_2
inst✝ : Inhabited Γ
Λ : Type u_1
σ : Type u_3
S : Finset Λ
q₁ q₂ : Stmt₁
h✝ : q₁ ∈ stmts₁ q₂
hs✝ : SupportsStmt S q₂
a✝² : Γ → σ → Bool
a✝¹ a✝ : Stmt₁
a_ih✝¹ : q₁ ∈ stmts₁ a✝¹ → SupportsStmt S a✝¹ → SupportsStmt S q₁
a_ih✝ : q₁ ∈ stmts₁ a✝ → SupportsStmt S a✝ → SupportsStmt S q₁
hs : SupportsStmt S a✝¹ ∧ SupportsStmt S a✝
h : q₁ = branch a✝² a✝¹ a✝ ∨ q₁ ∈ stmts₁ a✝¹ ∨ q₁ ∈ stmts₁ a✝
⊢ SupportsStmt S q₁

case goto
Γ : Type u_2
inst✝ : Inhabited Γ
Λ : Type u_1
σ : Type u_3
S : Finset Λ
q₁ q₂ : Stmt₁
h✝ : q₁ ∈ stmts₁ q₂
hs✝ : SupportsStmt S q₂
a✝ : Γ → σ → Λ
hs : ∀ (a : Γ) (v : σ), a✝ a v ∈ S
h : q₁ = goto a✝
⊢ SupportsStmt S q₁

case halt
Γ : Type u_2
inst✝ : Inhabited Γ
Λ : Type u_1
σ : Type u_3
S : Finset Λ
q₁ q₂ : Stmt₁
h✝ : q₁ ∈ stmts₁ q₂
hs✝ : SupportsStmt S q₂
hs : True
h : q₁ = halt
⊢ SupportsStmt S q₁

tactic: case goto l => subst h; exact hs
state_before: case goto
Γ : Type u_2
inst✝ : Inhabited Γ
Λ : Type u_1
σ : Type u_3
S : Finset Λ
q₁ q₂ : Stmt₁
h✝ : q₁ ∈ stmts₁ q₂
hs✝ : SupportsStmt S q₂
a✝ : Γ → σ → Λ
hs : ∀ (a : Γ) (v : σ), a✝ a v ∈ S
h : q₁ = goto a✝
⊢ SupportsStmt S q₁

case halt
Γ : Type u_2
inst✝ : Inhabited Γ
Λ : Type u_1
σ : Type u_3
S : Finset Λ
q₁ q₂ : Stmt₁
h✝ : q₁ ∈ stmts₁ q₂
hs✝ : SupportsStmt S q₂
hs : True
h : q₁ = halt
⊢ SupportsStmt S q₁

tactic: case halt => subst h; trivial
state_before: case halt
Γ : Type u_2
inst✝ : Inhabited Γ
Λ : Type u_1
σ : Type u_3
S : Finset Λ
q₁ q₂ : Stmt₁
h✝ : q₁ ∈ stmts₁ q₂
hs✝ : SupportsStmt S q₂
hs : True
h : q₁ = halt
⊢ SupportsStmt S q₁

tactic: rcases h with (rfl | h) <;> [exact hs; exact IH h hs]
state_before: case load
Γ : Type u_2
inst✝ : Inhabited Γ
Λ : Type u_1
σ : Type u_3
S : Finset Λ
q₁ q₂ : Stmt₁
h✝ : q₁ ∈ stmts₁ q₂
hs✝ : SupportsStmt S q₂
a✝ : Γ → σ → σ
q : Stmt₁
IH : q₁ ∈ stmts₁ q → SupportsStmt S q → SupportsStmt S q₁
hs : SupportsStmt S q
h : q₁ = load a✝ q ∨ q₁ ∈ stmts₁ q
⊢ SupportsStmt S q₁

case branch
Γ : Type u_2
inst✝ : Inhabited Γ
Λ : Type u_1
σ : Type u_3
S : Finset Λ
q₁ q₂ : Stmt₁
h✝ : q₁ ∈ stmts₁ q₂
hs✝ : SupportsStmt S q₂
a✝² : Γ → σ → Bool
a✝¹ a✝ : Stmt₁
a_ih✝¹ : q₁ ∈ stmts₁ a✝¹ → SupportsStmt S a✝¹ → SupportsStmt S q₁
a_ih✝ : q₁ ∈ stmts₁ a✝ → SupportsStmt S a✝ → SupportsStmt S q₁
hs : SupportsStmt S a✝¹ ∧ SupportsStmt S a✝
h : q₁ = branch a✝² a✝¹ a✝ ∨ q₁ ∈ stmts₁ a✝¹ ∨ q₁ ∈ stmts₁ a✝
⊢ SupportsStmt S q₁

case goto
Γ : Type u_2
inst✝ : Inhabited Γ
Λ : Type u_1
σ : Type u_3
S : Finset Λ
q₁ q₂ : Stmt₁
h✝ : q₁ ∈ stmts₁ q₂
hs✝ : SupportsStmt S q₂
a✝ : Γ → σ → Λ
hs : ∀ (a : Γ) (v : σ), a✝ a v ∈ S
h : q₁ = goto a✝
⊢ SupportsStmt S q₁

case halt
Γ : Type u_2
inst✝ : Inhabited Γ
Λ : Type u_1
σ : Type u_3
S : Finset Λ
q₁ q₂ : Stmt₁
h✝ : q₁ ∈ stmts₁ q₂
hs✝ : SupportsStmt S q₂
hs : True
h : q₁ = halt
⊢ SupportsStmt S q₁

tactic: rcases h with (rfl | h | h)
state_before: Γ : Type u_2
inst✝ : Inhabited Γ
Λ : Type u_1
σ : Type u_3
S : Finset Λ
q₁✝ q₂✝ : Stmt₁
h✝ : q₁✝ ∈ stmts₁ q₂✝
hs✝ : SupportsStmt S q₂✝
p : Γ → σ → Bool
q₁ q₂ : Stmt₁
IH₁ : q₁✝ ∈ stmts₁ q₁ → SupportsStmt S q₁ → SupportsStmt S q₁✝
IH₂ : q₁✝ ∈ stmts₁ q₂ → SupportsStmt S q₂ → SupportsStmt S q₁✝
hs : SupportsStmt S q₁ ∧ SupportsStmt S q₂
h : q₁✝ = branch p q₁ q₂ ∨ q₁✝ ∈ stmts₁ q₁ ∨ q₁✝ ∈ stmts₁ q₂
⊢ SupportsStmt S q₁✝

tactic: exacts [hs, IH₁ h hs.1, IH₂ h hs.2]
state_before: case inl
Γ : Type u_2
inst✝ : Inhabited Γ
Λ : Type u_1
σ : Type u_3
S : Finset Λ
q₂✝ : Stmt₁
hs✝ : SupportsStmt S q₂✝
p : Γ → σ → Bool
q₁ q₂ : Stmt₁
hs : SupportsStmt S q₁ ∧ SupportsStmt S q₂
h : branch p q₁ q₂ ∈ stmts₁ q₂✝
IH₁ : branch p q₁ q₂ ∈ stmts₁ q₁ → SupportsStmt S q₁ → SupportsStmt S (branch p q₁ q₂)
IH₂ : branch p q₁ q₂ ∈ stmts₁ q₂ → SupportsStmt S q₂ → SupportsStmt S (branch p q₁ q₂)
⊢ SupportsStmt S (branch p q₁ q₂)

case inr.inl
Γ : Type u_2
inst✝ : Inhabited Γ
Λ : Type u_1
σ : Type u_3
S : Finset Λ
q₁✝ q₂✝ : Stmt₁
h✝ : q₁✝ ∈ stmts₁ q₂✝
hs✝ : SupportsStmt S q₂✝
p : Γ → σ → Bool
q₁ q₂ : Stmt₁
IH₁ : q₁✝ ∈ stmts₁ q₁ → SupportsStmt S q₁ → SupportsStmt S q₁✝
IH₂ : q₁✝ ∈ stmts₁ q₂ → SupportsStmt S q₂ → SupportsStmt S q₁✝
hs : SupportsStmt S q₁ ∧ SupportsStmt S q₂
h : q₁✝ ∈ stmts₁ q₁
⊢ SupportsStmt S q₁✝

case inr.inr
Γ : Type u_2
inst✝ : Inhabited Γ
Λ : Type u_1
σ : Type u_3
S : Finset Λ
q₁✝ q₂✝ : Stmt₁
h✝ : q₁✝ ∈ stmts₁ q₂✝
hs✝ : SupportsStmt S q₂✝
p : Γ → σ → Bool
q₁ q₂ : Stmt₁
IH₁ : q₁✝ ∈ stmts₁ q₁ → SupportsStmt S q₁ → SupportsStmt S q₁✝
IH₂ : q₁✝ ∈ stmts₁ q₂ → SupportsStmt S q₂ → SupportsStmt S q₁✝
hs : SupportsStmt S q₁ ∧ SupportsStmt S q₂
h : q₁✝ ∈ stmts₁ q₂
⊢ SupportsStmt S q₁✝

tactic: subst h
state_before: Γ : Type u_2
inst✝ : Inhabited Γ
Λ : Type u_1
σ : Type u_3
S : Finset Λ
q₁ q₂ : Stmt₁
h✝ : q₁ ∈ stmts₁ q₂
hs✝ : SupportsStmt S q₂
l : Γ → σ → Λ
hs : ∀ (a : Γ) (v : σ), l a v ∈ S
h : q₁ = goto l
⊢ SupportsStmt S q₁

tactic: exact hs
state_before: Γ : Type u_2
inst✝ : Inhabited Γ
Λ : Type u_1
σ : Type u_3
S : Finset Λ
q₂ : Stmt₁
hs✝ : SupportsStmt S q₂
l : Γ → σ → Λ
hs : ∀ (a : Γ) (v : σ), l a v ∈ S
h : goto l ∈ stmts₁ q₂
⊢ SupportsStmt S (goto l)

tactic: subst h
state_before: Γ : Type u_2
inst✝ : Inhabited Γ
Λ : Type u_1
σ : Type u_3
S : Finset Λ
q₁ q₂ : Stmt₁
h✝ : q₁ ∈ stmts₁ q₂
hs✝ : SupportsStmt S q₂
hs : True
h : q₁ = halt
⊢ SupportsStmt S q₁

tactic: trivial
state_before: Γ : Type u_2
inst✝ : Inhabited Γ
Λ : Type u_1
σ : Type u_3
S : Finset Λ
q₂ : Stmt₁
hs✝ : SupportsStmt S q₂
hs : True
h : halt ∈ stmts₁ q₂
⊢ SupportsStmt S halt