Theorem: RegularExpression.add_rmatch_iff
File: Mathlib/Computability/RegularExpressions.lean

tactic: induction' x with _ _ ih generalizing P Q
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
dec : DecidableEq α
a b : α
P Q : RegularExpression α
x : List α
⊢ (P + Q).rmatch x = true ↔ P.rmatch x = true ∨ Q.rmatch x = true
state_after: case nil
α : Type u_1
β : Type u_2
γ : Type u_3
dec : DecidableEq α
a b : α
P Q : RegularExpression α
⊢ (P + Q).rmatch [] = true ↔ P.rmatch [] = true ∨ Q.rmatch [] = true

case cons
α : Type u_1
β : Type u_2
γ : Type u_3
dec : DecidableEq α
a b head✝ : α
tail✝ : List α
ih : ∀ (P Q : RegularExpression α), (P + Q).rmatch tail✝ = true ↔ P.rmatch tail✝ = true ∨ Q.rmatch tail✝ = true
P Q : RegularExpression α
⊢ (P + Q).rmatch (head✝ :: tail✝) = true ↔ P.rmatch (head✝ :: tail✝) = true ∨ Q.rmatch (head✝ :: tail✝) = true

tactic: simp only [rmatch, matchEpsilon, Bool.or_eq_true_iff]
state_before: case nil
α : Type u_1
β : Type u_2
γ : Type u_3
dec : DecidableEq α
a b : α
P Q : RegularExpression α
⊢ (P + Q).rmatch [] = true ↔ P.rmatch [] = true ∨ Q.rmatch [] = true
state_after: no goals

tactic: repeat rw [rmatch]
state_before: case cons
α : Type u_1
β : Type u_2
γ : Type u_3
dec : DecidableEq α
a b head✝ : α
tail✝ : List α
ih : ∀ (P Q : RegularExpression α), (P + Q).rmatch tail✝ = true ↔ P.rmatch tail✝ = true ∨ Q.rmatch tail✝ = true
P Q : RegularExpression α
⊢ (P + Q).rmatch (head✝ :: tail✝) = true ↔ P.rmatch (head✝ :: tail✝) = true ∨ Q.rmatch (head✝ :: tail✝) = true
state_after: case cons
α : Type u_1
β : Type u_2
γ : Type u_3
dec : DecidableEq α
a b head✝ : α
tail✝ : List α
ih : ∀ (P Q : RegularExpression α), (P + Q).rmatch tail✝ = true ↔ P.rmatch tail✝ = true ∨ Q.rmatch tail✝ = true
P Q : RegularExpression α
⊢ ((P + Q).deriv head✝).rmatch tail✝ = true ↔ (P.deriv head✝).rmatch tail✝ = true ∨ (Q.deriv head✝).rmatch tail✝ = true

tactic: rw [deriv_add]
state_before: case cons
α : Type u_1
β : Type u_2
γ : Type u_3
dec : DecidableEq α
a b head✝ : α
tail✝ : List α
ih : ∀ (P Q : RegularExpression α), (P + Q).rmatch tail✝ = true ↔ P.rmatch tail✝ = true ∨ Q.rmatch tail✝ = true
P Q : RegularExpression α
⊢ ((P + Q).deriv head✝).rmatch tail✝ = true ↔ (P.deriv head✝).rmatch tail✝ = true ∨ (Q.deriv head✝).rmatch tail✝ = true
state_after: case cons
α : Type u_1
β : Type u_2
γ : Type u_3
dec : DecidableEq α
a b head✝ : α
tail✝ : List α
ih : ∀ (P Q : RegularExpression α), (P + Q).rmatch tail✝ = true ↔ P.rmatch tail✝ = true ∨ Q.rmatch tail✝ = true
P Q : RegularExpression α
⊢ (P.deriv head✝ + Q.deriv head✝).rmatch tail✝ = true ↔
    (P.deriv head✝).rmatch tail✝ = true ∨ (Q.deriv head✝).rmatch tail✝ = true

tactic: exact ih _ _
state_before: case cons
α : Type u_1
β : Type u_2
γ : Type u_3
dec : DecidableEq α
a b head✝ : α
tail✝ : List α
ih : ∀ (P Q : RegularExpression α), (P + Q).rmatch tail✝ = true ↔ P.rmatch tail✝ = true ∨ Q.rmatch tail✝ = true
P Q : RegularExpression α
⊢ (P.deriv head✝ + Q.deriv head✝).rmatch tail✝ = true ↔
    (P.deriv head✝).rmatch tail✝ = true ∨ (Q.deriv head✝).rmatch tail✝ = true
state_after: no goals

tactic: rw [rmatch]
state_before: case cons
α : Type u_1
β : Type u_2
γ : Type u_3
dec : DecidableEq α
a b head✝ : α
tail✝ : List α
ih : ∀ (P Q : RegularExpression α), (P + Q).rmatch tail✝ = true ↔ P.rmatch tail✝ = true ∨ Q.rmatch tail✝ = true
P Q : RegularExpression α
⊢ ((P + Q).deriv head✝).rmatch tail✝ = true ↔ (P.deriv head✝).rmatch tail✝ = true ∨ Q.rmatch (head✝ :: tail✝) = true
state_after: case cons
α : Type u_1
β : Type u_2
γ : Type u_3
dec : DecidableEq α
a b head✝ : α
tail✝ : List α
ih : ∀ (P Q : RegularExpression α), (P + Q).rmatch tail✝ = true ↔ P.rmatch tail✝ = true ∨ Q.rmatch tail✝ = true
P Q : RegularExpression α
⊢ ((P + Q).deriv head✝).rmatch tail✝ = true ↔ (P.deriv head✝).rmatch tail✝ = true ∨ (Q.deriv head✝).rmatch tail✝ = true