cases em (isAtomic α) <;> cases em (isStar α)
γ : Program
δ : List Program
γ_in : γ ∈ δ
α β : Program
ℓ : TP (α⋓β)
δ_in : δ ∈ P α fun τ => ℓ ⟨↑τ, ⋯⟩
IH :
  if isAtomic α = true then γ = α
  else if isStar α = true then lengthOfProgram γ ≤ lengthOfProgram α else lengthOfProgram γ < lengthOfProgram α
⊢ lengthOfProgram γ < 1 + lengthOfProgram α + lengthOfProgram β
case inl.inl
γ : Program
δ : List Program
γ_in : γ ∈ δ
α β : Program
ℓ : TP (α⋓β)
δ_in : δ ∈ P α fun τ => ℓ ⟨↑τ, ⋯⟩
IH :
  if isAtomic α = true then γ = α
  else if isStar α = true then lengthOfProgram γ ≤ lengthOfProgram α else lengthOfProgram γ < lengthOfProgram α
h✝¹ : isAtomic α = true
h✝ : isStar α = true
⊢ lengthOfProgram γ < 1 + lengthOfProgram α + lengthOfProgram β

case inl.inr
γ : Program
δ : List Program
γ_in : γ ∈ δ
α β : Program
ℓ : TP (α⋓β)
δ_in : δ ∈ P α fun τ => ℓ ⟨↑τ, ⋯⟩
IH :
  if isAtomic α = true then γ = α
  else if isStar α = true then lengthOfProgram γ ≤ lengthOfProgram α else lengthOfProgram γ < lengthOfProgram α
h✝¹ : isAtomic α = true
h✝ : ¬isStar α = true
⊢ lengthOfProgram γ < 1 + lengthOfProgram α + lengthOfProgram β

case inr.inl
γ : Program
δ : List Program
γ_in : γ ∈ δ
α β : Program
ℓ : TP (α⋓β)
δ_in : δ ∈ P α fun τ => ℓ ⟨↑τ, ⋯⟩
IH :
  if isAtomic α = true then γ = α
  else if isStar α = true then lengthOfProgram γ ≤ lengthOfProgram α else lengthOfProgram γ < lengthOfProgram α
h✝¹ : ¬isAtomic α = true
h✝ : isStar α = true
⊢ lengthOfProgram γ < 1 + lengthOfProgram α + lengthOfProgram β

case inr.inr
γ : Program
δ : List Program
γ_in : γ ∈ δ
α β : Program
ℓ : TP (α⋓β)
δ_in : δ ∈ P α fun τ => ℓ ⟨↑τ, ⋯⟩
IH :
  if isAtomic α = true then γ = α
  else if isStar α = true then lengthOfProgram γ ≤ lengthOfProgram α else lengthOfProgram γ < lengthOfProgram α
h✝¹ : ¬isAtomic α = true
h✝ : ¬isStar α = true
⊢ lengthOfProgram γ < 1 + lengthOfProgram α + lengthOfProgram β