α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
P : RegularExpression α
x : List α
⊢ rmatch P x = true ↔ x ∈ matches' P
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
P : RegularExpression α
⊢ ∀ (x : List α), rmatch P x = true ↔ x ∈ matches' P
intro x
case zero
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
x : List α
⊢ rmatch zero x = true ↔ x ∈ matches' zero

case epsilon
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
x : List α
⊢ rmatch epsilon x = true ↔ x ∈ matches' epsilon

case char
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b a✝ : α
x : List α
⊢ rmatch (char a✝) x = true ↔ x ∈ matches' (char a✝)

case plus
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝¹ a✝ : RegularExpression α
a_ih✝¹ : ∀ (x : List α), rmatch a✝¹ x = true ↔ x ∈ matches' a✝¹
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (plus a✝¹ a✝) x = true ↔ x ∈ matches' (plus a✝¹ a✝)

case comp
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝¹ a✝ : RegularExpression α
a_ih✝¹ : ∀ (x : List α), rmatch a✝¹ x = true ↔ x ∈ matches' a✝¹
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (comp a✝¹ a✝) x = true ↔ x ∈ matches' (comp a✝¹ a✝)

case star
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (star a✝) x = true ↔ x ∈ matches' (star a✝)
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
P : RegularExpression α
x : List α
⊢ rmatch P x = true ↔ x ∈ matches' P
induction P generalizing x
case zero
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
x : List α
⊢ rmatch 0 x = true ↔ x ∈ matches' 0

case epsilon
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
x : List α
⊢ rmatch 1 x = true ↔ x ∈ matches' 1

case char
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b a✝ : α
x : List α
⊢ rmatch (char a✝) x = true ↔ x ∈ matches' (char a✝)

case plus
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝¹ a✝ : RegularExpression α
a_ih✝¹ : ∀ (x : List α), rmatch a✝¹ x = true ↔ x ∈ matches' a✝¹
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (a✝¹ + a✝) x = true ↔ x ∈ matches' (a✝¹ + a✝)

case comp
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝¹ a✝ : RegularExpression α
a_ih✝¹ : ∀ (x : List α), rmatch a✝¹ x = true ↔ x ∈ matches' a✝¹
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (a✝¹ * a✝) x = true ↔ x ∈ matches' (a✝¹ * a✝)

case star
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (star a✝) x = true ↔ x ∈ matches' (star a✝)
case zero
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
x : List α
⊢ rmatch zero x = true ↔ x ∈ matches' zero

case epsilon
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
x : List α
⊢ rmatch epsilon x = true ↔ x ∈ matches' epsilon

case char
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b a✝ : α
x : List α
⊢ rmatch (char a✝) x = true ↔ x ∈ matches' (char a✝)

case plus
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝¹ a✝ : RegularExpression α
a_ih✝¹ : ∀ (x : List α), rmatch a✝¹ x = true ↔ x ∈ matches' a✝¹
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (plus a✝¹ a✝) x = true ↔ x ∈ matches' (plus a✝¹ a✝)

case comp
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝¹ a✝ : RegularExpression α
a_ih✝¹ : ∀ (x : List α), rmatch a✝¹ x = true ↔ x ∈ matches' a✝¹
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (comp a✝¹ a✝) x = true ↔ x ∈ matches' (comp a✝¹ a✝)

case star
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (star a✝) x = true ↔ x ∈ matches' (star a✝)
all_goals
  try rw [zero_def]
  try rw [one_def]
  try rw [plus_def]
  try rw [comp_def]
case epsilon
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
x : List α
⊢ rmatch 1 x = true ↔ x ∈ matches' 1

case char
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b a✝ : α
x : List α
⊢ rmatch (char a✝) x = true ↔ x ∈ matches' (char a✝)

case plus
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝¹ a✝ : RegularExpression α
a_ih✝¹ : ∀ (x : List α), rmatch a✝¹ x = true ↔ x ∈ matches' a✝¹
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (a✝¹ + a✝) x = true ↔ x ∈ matches' (a✝¹ + a✝)

case comp
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝¹ a✝ : RegularExpression α
a_ih✝¹ : ∀ (x : List α), rmatch a✝¹ x = true ↔ x ∈ matches' a✝¹
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (a✝¹ * a✝) x = true ↔ x ∈ matches' (a✝¹ * a✝)

case star
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (star a✝) x = true ↔ x ∈ matches' (star a✝)
case zero
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
x : List α
⊢ rmatch 0 x = true ↔ x ∈ matches' 0

case epsilon
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
x : List α
⊢ rmatch 1 x = true ↔ x ∈ matches' 1

case char
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b a✝ : α
x : List α
⊢ rmatch (char a✝) x = true ↔ x ∈ matches' (char a✝)

case plus
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝¹ a✝ : RegularExpression α
a_ih✝¹ : ∀ (x : List α), rmatch a✝¹ x = true ↔ x ∈ matches' a✝¹
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (a✝¹ + a✝) x = true ↔ x ∈ matches' (a✝¹ + a✝)

case comp
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝¹ a✝ : RegularExpression α
a_ih✝¹ : ∀ (x : List α), rmatch a✝¹ x = true ↔ x ∈ matches' a✝¹
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (a✝¹ * a✝) x = true ↔ x ∈ matches' (a✝¹ * a✝)

case star
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (star a✝) x = true ↔ x ∈ matches' (star a✝)
case zero =>
  rw [zero_rmatch]
  tauto
case char
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b a✝ : α
x : List α
⊢ rmatch (char a✝) x = true ↔ x ∈ matches' (char a✝)

case plus
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝¹ a✝ : RegularExpression α
a_ih✝¹ : ∀ (x : List α), rmatch a✝¹ x = true ↔ x ∈ matches' a✝¹
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (a✝¹ + a✝) x = true ↔ x ∈ matches' (a✝¹ + a✝)

case comp
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝¹ a✝ : RegularExpression α
a_ih✝¹ : ∀ (x : List α), rmatch a✝¹ x = true ↔ x ∈ matches' a✝¹
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (a✝¹ * a✝) x = true ↔ x ∈ matches' (a✝¹ * a✝)

case star
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (star a✝) x = true ↔ x ∈ matches' (star a✝)
case epsilon
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
x : List α
⊢ rmatch 1 x = true ↔ x ∈ matches' 1

case char
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b a✝ : α
x : List α
⊢ rmatch (char a✝) x = true ↔ x ∈ matches' (char a✝)

case plus
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝¹ a✝ : RegularExpression α
a_ih✝¹ : ∀ (x : List α), rmatch a✝¹ x = true ↔ x ∈ matches' a✝¹
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (a✝¹ + a✝) x = true ↔ x ∈ matches' (a✝¹ + a✝)

case comp
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝¹ a✝ : RegularExpression α
a_ih✝¹ : ∀ (x : List α), rmatch a✝¹ x = true ↔ x ∈ matches' a✝¹
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (a✝¹ * a✝) x = true ↔ x ∈ matches' (a✝¹ * a✝)

case star
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (star a✝) x = true ↔ x ∈ matches' (star a✝)
case epsilon =>
  rw [one_rmatch_iff]
  rfl
case plus
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝¹ a✝ : RegularExpression α
a_ih✝¹ : ∀ (x : List α), rmatch a✝¹ x = true ↔ x ∈ matches' a✝¹
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (a✝¹ + a✝) x = true ↔ x ∈ matches' (a✝¹ + a✝)

case comp
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝¹ a✝ : RegularExpression α
a_ih✝¹ : ∀ (x : List α), rmatch a✝¹ x = true ↔ x ∈ matches' a✝¹
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (a✝¹ * a✝) x = true ↔ x ∈ matches' (a✝¹ * a✝)

case star
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (star a✝) x = true ↔ x ∈ matches' (star a✝)
case char
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b a✝ : α
x : List α
⊢ rmatch (char a✝) x = true ↔ x ∈ matches' (char a✝)

case plus
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝¹ a✝ : RegularExpression α
a_ih✝¹ : ∀ (x : List α), rmatch a✝¹ x = true ↔ x ∈ matches' a✝¹
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (a✝¹ + a✝) x = true ↔ x ∈ matches' (a✝¹ + a✝)

case comp
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝¹ a✝ : RegularExpression α
a_ih✝¹ : ∀ (x : List α), rmatch a✝¹ x = true ↔ x ∈ matches' a✝¹
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (a✝¹ * a✝) x = true ↔ x ∈ matches' (a✝¹ * a✝)

case star
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (star a✝) x = true ↔ x ∈ matches' (star a✝)
case char =>
  rw [char_rmatch_iff]
  rfl
case comp
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝¹ a✝ : RegularExpression α
a_ih✝¹ : ∀ (x : List α), rmatch a✝¹ x = true ↔ x ∈ matches' a✝¹
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (a✝¹ * a✝) x = true ↔ x ∈ matches' (a✝¹ * a✝)

case star
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (star a✝) x = true ↔ x ∈ matches' (star a✝)
case plus
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝¹ a✝ : RegularExpression α
a_ih✝¹ : ∀ (x : List α), rmatch a✝¹ x = true ↔ x ∈ matches' a✝¹
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (a✝¹ + a✝) x = true ↔ x ∈ matches' (a✝¹ + a✝)

case comp
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝¹ a✝ : RegularExpression α
a_ih✝¹ : ∀ (x : List α), rmatch a✝¹ x = true ↔ x ∈ matches' a✝¹
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (a✝¹ * a✝) x = true ↔ x ∈ matches' (a✝¹ * a✝)

case star
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (star a✝) x = true ↔ x ∈ matches' (star a✝)
case plus _ _ ih₁ ih₂ =>
  rw [add_rmatch_iff, ih₁, ih₂]
  rfl
case star
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (star a✝) x = true ↔ x ∈ matches' (star a✝)
case star
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (star a✝) x = true ↔ x ∈ matches' (star a✝)
try rw [zero_def]
case star
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (star a✝) x = true ↔ x ∈ matches' (star a✝)
case star
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (star a✝) x = true ↔ x ∈ matches' (star a✝)
try rw [one_def]
case star
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (star a✝) x = true ↔ x ∈ matches' (star a✝)
case star
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (star a✝) x = true ↔ x ∈ matches' (star a✝)
try rw [plus_def]
case star
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (star a✝) x = true ↔ x ∈ matches' (star a✝)
case star
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (star a✝) x = true ↔ x ∈ matches' (star a✝)
try rw [comp_def]
case star
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (star a✝) x = true ↔ x ∈ matches' (star a✝)
case star
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (star a✝) x = true ↔ x ∈ matches' (star a✝)
rw [zero_def]
case star
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (star a✝) x = true ↔ x ∈ matches' (star a✝)
case star
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (star a✝) x = true ↔ x ∈ matches' (star a✝)
rw [one_def]
case star
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (star a✝) x = true ↔ x ∈ matches' (star a✝)
case star
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (star a✝) x = true ↔ x ∈ matches' (star a✝)
rw [plus_def]
case star
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (star a✝) x = true ↔ x ∈ matches' (star a✝)
case star
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
a_ih✝ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (star a✝) x = true ↔ x ∈ matches' (star a✝)
rw [comp_def]
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
x : List α
⊢ false = true ↔ x ∈ matches' 0
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
x : List α
⊢ rmatch 0 x = true ↔ x ∈ matches' 0
rw [zero_rmatch]
no goals
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
x : List α
⊢ false = true ↔ x ∈ matches' 0
tauto
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
x : List α
⊢ x = [] ↔ x ∈ matches' 1
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
x : List α
⊢ rmatch 1 x = true ↔ x ∈ matches' 1
rw [one_rmatch_iff]
no goals
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
x : List α
⊢ x = [] ↔ x ∈ matches' 1
rfl
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b a✝ : α
x : List α
⊢ x = [a✝] ↔ x ∈ matches' (char a✝)
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b a✝ : α
x : List α
⊢ rmatch (char a✝) x = true ↔ x ∈ matches' (char a✝)
rw [char_rmatch_iff]
no goals
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b a✝ : α
x : List α
⊢ x = [a✝] ↔ x ∈ matches' (char a✝)
rfl
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝¹ a✝ : RegularExpression α
ih₁ : ∀ (x : List α), rmatch a✝¹ x = true ↔ x ∈ matches' a✝¹
ih₂ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ x ∈ matches' a✝¹ ∨ x ∈ matches' a✝ ↔ x ∈ matches' (a✝¹ + a✝)
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝¹ a✝ : RegularExpression α
ih₁ : ∀ (x : List α), rmatch a✝¹ x = true ↔ x ∈ matches' a✝¹
ih₂ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (a✝¹ + a✝) x = true ↔ x ∈ matches' (a✝¹ + a✝)
rw [add_rmatch_iff, ih₁, ih₂]
no goals
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝¹ a✝ : RegularExpression α
ih₁ : ∀ (x : List α), rmatch a✝¹ x = true ↔ x ∈ matches' a✝¹
ih₂ : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ x ∈ matches' a✝¹ ∨ x ∈ matches' a✝ ↔ x ∈ matches' (a✝¹ + a✝)
rfl
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
P Q : RegularExpression α
ih₁ : ∀ (x : List α), rmatch P x = true ↔ x ∈ matches' P
ih₂ : ∀ (x : List α), rmatch Q x = true ↔ x ∈ matches' Q
x : List α
⊢ (∃ t u, x = t ++ u ∧ rmatch P t = true ∧ rmatch Q u = true) ↔ x ∈ matches' (P * Q)
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
P Q : RegularExpression α
ih₁ : ∀ (x : List α), rmatch P x = true ↔ x ∈ matches' P
ih₂ : ∀ (x : List α), rmatch Q x = true ↔ x ∈ matches' Q
x : List α
⊢ rmatch (P * Q) x = true ↔ x ∈ matches' (P * Q)
simp only [mul_rmatch_iff, comp_def, Language.mul_def, exists_and_left, Set.mem_image2,
  Set.image_prod]
case mp
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
P Q : RegularExpression α
ih₁ : ∀ (x : List α), rmatch P x = true ↔ x ∈ matches' P
ih₂ : ∀ (x : List α), rmatch Q x = true ↔ x ∈ matches' Q
x : List α
⊢ (∃ t u, x = t ++ u ∧ rmatch P t = true ∧ rmatch Q u = true) → x ∈ matches' (P * Q)

case mpr
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
P Q : RegularExpression α
ih₁ : ∀ (x : List α), rmatch P x = true ↔ x ∈ matches' P
ih₂ : ∀ (x : List α), rmatch Q x = true ↔ x ∈ matches' Q
x : List α
⊢ x ∈ matches' (P * Q) → ∃ t u, x = t ++ u ∧ rmatch P t = true ∧ rmatch Q u = true
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
P Q : RegularExpression α
ih₁ : ∀ (x : List α), rmatch P x = true ↔ x ∈ matches' P
ih₂ : ∀ (x : List α), rmatch Q x = true ↔ x ∈ matches' Q
x : List α
⊢ (∃ t u, x = t ++ u ∧ rmatch P t = true ∧ rmatch Q u = true) ↔ x ∈ matches' (P * Q)
constructor
case mp.intro.intro.intro.intro
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
P Q : RegularExpression α
ih₁ : ∀ (x : List α), rmatch P x = true ↔ x ∈ matches' P
ih₂ : ∀ (x : List α), rmatch Q x = true ↔ x ∈ matches' Q
x✝ x y : List α
hsum : x✝ = x ++ y
hmatch₁ : rmatch P x = true
hmatch₂ : rmatch Q y = true
⊢ x✝ ∈ matches' (P * Q)
case mp
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
P Q : RegularExpression α
ih₁ : ∀ (x : List α), rmatch P x = true ↔ x ∈ matches' P
ih₂ : ∀ (x : List α), rmatch Q x = true ↔ x ∈ matches' Q
x : List α
⊢ (∃ t u, x = t ++ u ∧ rmatch P t = true ∧ rmatch Q u = true) → x ∈ matches' (P * Q)
rintro ⟨x, y, hsum, hmatch₁, hmatch₂⟩
case mp.intro.intro.intro.intro
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
P Q : RegularExpression α
ih₁ : ∀ (x : List α), rmatch P x = true ↔ x ∈ matches' P
ih₂ : ∀ (x : List α), rmatch Q x = true ↔ x ∈ matches' Q
x✝ x y : List α
hsum : x✝ = x ++ y
hmatch₁ : x ∈ matches' P
hmatch₂ : rmatch Q y = true
⊢ x✝ ∈ matches' (P * Q)
case mp.intro.intro.intro.intro
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
P Q : RegularExpression α
ih₁ : ∀ (x : List α), rmatch P x = true ↔ x ∈ matches' P
ih₂ : ∀ (x : List α), rmatch Q x = true ↔ x ∈ matches' Q
x✝ x y : List α
hsum : x✝ = x ++ y
hmatch₁ : rmatch P x = true
hmatch₂ : rmatch Q y = true
⊢ x✝ ∈ matches' (P * Q)
rw [ih₁] at hmatch₁
case mp.intro.intro.intro.intro
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
P Q : RegularExpression α
ih₁ : ∀ (x : List α), rmatch P x = true ↔ x ∈ matches' P
ih₂ : ∀ (x : List α), rmatch Q x = true ↔ x ∈ matches' Q
x✝ x y : List α
hsum : x✝ = x ++ y
hmatch₁ : x ∈ matches' P
hmatch₂ : y ∈ matches' Q
⊢ x✝ ∈ matches' (P * Q)
case mp.intro.intro.intro.intro
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
P Q : RegularExpression α
ih₁ : ∀ (x : List α), rmatch P x = true ↔ x ∈ matches' P
ih₂ : ∀ (x : List α), rmatch Q x = true ↔ x ∈ matches' Q
x✝ x y : List α
hsum : x✝ = x ++ y
hmatch₁ : x ∈ matches' P
hmatch₂ : rmatch Q y = true
⊢ x✝ ∈ matches' (P * Q)
rw [ih₂] at hmatch₂
no goals
case mp.intro.intro.intro.intro
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
P Q : RegularExpression α
ih₁ : ∀ (x : List α), rmatch P x = true ↔ x ∈ matches' P
ih₂ : ∀ (x : List α), rmatch Q x = true ↔ x ∈ matches' Q
x✝ x y : List α
hsum : x✝ = x ++ y
hmatch₁ : x ∈ matches' P
hmatch₂ : y ∈ matches' Q
⊢ x✝ ∈ matches' (P * Q)
exact ⟨x, y, hmatch₁, hmatch₂, hsum.symm⟩
case mpr.intro.intro.intro.intro
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
P Q : RegularExpression α
ih₁ : ∀ (x : List α), rmatch P x = true ↔ x ∈ matches' P
ih₂ : ∀ (x : List α), rmatch Q x = true ↔ x ∈ matches' Q
x✝ x y : List α
hmatch₁ : x ∈ matches' P
hmatch₂ : y ∈ matches' Q
hsum : (fun x x_1 => x ++ x_1) x y = x✝
⊢ ∃ t u, x✝ = t ++ u ∧ rmatch P t = true ∧ rmatch Q u = true
case mpr
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
P Q : RegularExpression α
ih₁ : ∀ (x : List α), rmatch P x = true ↔ x ∈ matches' P
ih₂ : ∀ (x : List α), rmatch Q x = true ↔ x ∈ matches' Q
x : List α
⊢ x ∈ matches' (P * Q) → ∃ t u, x = t ++ u ∧ rmatch P t = true ∧ rmatch Q u = true
rintro ⟨x, y, hmatch₁, hmatch₂, hsum⟩
case mpr.intro.intro.intro.intro
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
P Q : RegularExpression α
ih₁ : ∀ (x : List α), rmatch P x = true ↔ x ∈ matches' P
ih₂ : ∀ (x : List α), rmatch Q x = true ↔ x ∈ matches' Q
x✝ x y : List α
hmatch₁ : rmatch P x = true
hmatch₂ : y ∈ matches' Q
hsum : (fun x x_1 => x ++ x_1) x y = x✝
⊢ ∃ t u, x✝ = t ++ u ∧ rmatch P t = true ∧ rmatch Q u = true
case mpr.intro.intro.intro.intro
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
P Q : RegularExpression α
ih₁ : ∀ (x : List α), rmatch P x = true ↔ x ∈ matches' P
ih₂ : ∀ (x : List α), rmatch Q x = true ↔ x ∈ matches' Q
x✝ x y : List α
hmatch₁ : x ∈ matches' P
hmatch₂ : y ∈ matches' Q
hsum : (fun x x_1 => x ++ x_1) x y = x✝
⊢ ∃ t u, x✝ = t ++ u ∧ rmatch P t = true ∧ rmatch Q u = true
rw [← ih₁] at hmatch₁
case mpr.intro.intro.intro.intro
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
P Q : RegularExpression α
ih₁ : ∀ (x : List α), rmatch P x = true ↔ x ∈ matches' P
ih₂ : ∀ (x : List α), rmatch Q x = true ↔ x ∈ matches' Q
x✝ x y : List α
hmatch₁ : rmatch P x = true
hmatch₂ : rmatch Q y = true
hsum : (fun x x_1 => x ++ x_1) x y = x✝
⊢ ∃ t u, x✝ = t ++ u ∧ rmatch P t = true ∧ rmatch Q u = true
case mpr.intro.intro.intro.intro
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
P Q : RegularExpression α
ih₁ : ∀ (x : List α), rmatch P x = true ↔ x ∈ matches' P
ih₂ : ∀ (x : List α), rmatch Q x = true ↔ x ∈ matches' Q
x✝ x y : List α
hmatch₁ : rmatch P x = true
hmatch₂ : y ∈ matches' Q
hsum : (fun x x_1 => x ++ x_1) x y = x✝
⊢ ∃ t u, x✝ = t ++ u ∧ rmatch P t = true ∧ rmatch Q u = true
rw [← ih₂] at hmatch₂
no goals
case mpr.intro.intro.intro.intro
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
P Q : RegularExpression α
ih₁ : ∀ (x : List α), rmatch P x = true ↔ x ∈ matches' P
ih₂ : ∀ (x : List α), rmatch Q x = true ↔ x ∈ matches' Q
x✝ x y : List α
hmatch₁ : rmatch P x = true
hmatch₂ : rmatch Q y = true
hsum : (fun x x_1 => x ++ x_1) x y = x✝
⊢ ∃ t u, x✝ = t ++ u ∧ rmatch P t = true ∧ rmatch Q u = true
exact ⟨x, y, hsum.symm, hmatch₁, hmatch₂⟩
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
ih : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ (∃ S, x = join S ∧ ∀ (t : List α), t ∈ S → t ≠ [] ∧ rmatch a✝ t = true) ↔ x ∈ matches' (star a✝)
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
ih : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ rmatch (star a✝) x = true ↔ x ∈ matches' (star a✝)
rw [star_rmatch_iff]
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
ih : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ (∃ S, x = join S ∧ ∀ (t : List α), t ∈ S → ¬t = [] ∧ rmatch a✝ t = true) ↔
    x ∈ {x | ∃ S, x = join S ∧ ∀ (y : List α), y ∈ S → y ∈ matches' a✝ ∧ ¬y = []}
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
ih : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ (∃ S, x = join S ∧ ∀ (t : List α), t ∈ S → t ≠ [] ∧ rmatch a✝ t = true) ↔ x ∈ matches' (star a✝)
simp only [ne_eq, matches', Language.kstar_def_nonempty, mem_setOf_eq]
case mp
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
ih : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ (∃ S, x = join S ∧ ∀ (t : List α), t ∈ S → ¬t = [] ∧ rmatch a✝ t = true) →
    x ∈ {x | ∃ S, x = join S ∧ ∀ (y : List α), y ∈ S → y ∈ matches' a✝ ∧ ¬y = []}

case mpr
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
ih : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ x ∈ {x | ∃ S, x = join S ∧ ∀ (y : List α), y ∈ S → y ∈ matches' a✝ ∧ ¬y = []} →
    ∃ S, x = join S ∧ ∀ (t : List α), t ∈ S → ¬t = [] ∧ rmatch a✝ t = true
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
ih : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ (∃ S, x = join S ∧ ∀ (t : List α), t ∈ S → ¬t = [] ∧ rmatch a✝ t = true) ↔
    x ∈ {x | ∃ S, x = join S ∧ ∀ (y : List α), y ∈ S → y ∈ matches' a✝ ∧ ¬y = []}
constructor
case mp.intro.intro
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
ih : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
S : List (List α)
hx : x = join S
y : List α
hS : y ∈ S → ¬y = [] ∧ rmatch a✝ y = true
⊢ y ∈ S → y ∈ matches' a✝ ∧ ¬y = []

case mpr.intro.intro
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
ih : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
S : List (List α)
hx : x = join S
y : List α
hS : y ∈ S → y ∈ matches' a✝ ∧ ¬y = []
⊢ y ∈ S → ¬y = [] ∧ rmatch a✝ y = true
case mp
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
ih : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ (∃ S, x = join S ∧ ∀ (t : List α), t ∈ S → ¬t = [] ∧ rmatch a✝ t = true) →
    x ∈ {x | ∃ S, x = join S ∧ ∀ (y : List α), y ∈ S → y ∈ matches' a✝ ∧ ¬y = []}

case mpr
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
ih : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ x ∈ {x | ∃ S, x = join S ∧ ∀ (y : List α), y ∈ S → y ∈ matches' a✝ ∧ ¬y = []} →
    ∃ S, x = join S ∧ ∀ (t : List α), t ∈ S → ¬t = [] ∧ rmatch a✝ t = true
all_goals
  rintro ⟨S, hx, hS⟩
  refine' ⟨S, hx, _⟩
  intro y
  specialize hS y
case mpr.intro.intro
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
ih : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
S : List (List α)
hx : x = join S
hS : ∀ (y : List α), y ∈ S → y ∈ matches' a✝ ∧ ¬y = []
⊢ ∃ S, x = join S ∧ ∀ (t : List α), t ∈ S → ¬t = [] ∧ rmatch a✝ t = true
case mpr
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
ih : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
⊢ x ∈ {x | ∃ S, x = join S ∧ ∀ (y : List α), y ∈ S → y ∈ matches' a✝ ∧ ¬y = []} →
    ∃ S, x = join S ∧ ∀ (t : List α), t ∈ S → ¬t = [] ∧ rmatch a✝ t = true
rintro ⟨S, hx, hS⟩
case mpr.intro.intro
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
ih : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
S : List (List α)
hx : x = join S
hS : ∀ (y : List α), y ∈ S → y ∈ matches' a✝ ∧ ¬y = []
⊢ ∀ (t : List α), t ∈ S → ¬t = [] ∧ rmatch a✝ t = true
case mpr.intro.intro
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
ih : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
S : List (List α)
hx : x = join S
hS : ∀ (y : List α), y ∈ S → y ∈ matches' a✝ ∧ ¬y = []
⊢ ∃ S, x = join S ∧ ∀ (t : List α), t ∈ S → ¬t = [] ∧ rmatch a✝ t = true
refine' ⟨S, hx, _⟩
case mpr.intro.intro
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
ih : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
S : List (List α)
hx : x = join S
hS : ∀ (y : List α), y ∈ S → y ∈ matches' a✝ ∧ ¬y = []
y : List α
⊢ y ∈ S → ¬y = [] ∧ rmatch a✝ y = true
case mpr.intro.intro
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
ih : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
S : List (List α)
hx : x = join S
hS : ∀ (y : List α), y ∈ S → y ∈ matches' a✝ ∧ ¬y = []
⊢ ∀ (t : List α), t ∈ S → ¬t = [] ∧ rmatch a✝ t = true
intro y
case mpr.intro.intro
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
ih : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
S : List (List α)
hx : x = join S
y : List α
hS : y ∈ S → y ∈ matches' a✝ ∧ ¬y = []
⊢ y ∈ S → ¬y = [] ∧ rmatch a✝ y = true
case mpr.intro.intro
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
ih : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
S : List (List α)
hx : x = join S
hS : ∀ (y : List α), y ∈ S → y ∈ matches' a✝ ∧ ¬y = []
y : List α
⊢ y ∈ S → ¬y = [] ∧ rmatch a✝ y = true
specialize hS y
case mp.intro.intro
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
ih : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
S : List (List α)
hx : x = join S
y : List α
hS : y ∈ S → ¬y = [] ∧ rmatch a✝ y = true
⊢ y ∈ S → rmatch a✝ y = true ∧ ¬y = []
case mp.intro.intro
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
ih : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
S : List (List α)
hx : x = join S
y : List α
hS : y ∈ S → ¬y = [] ∧ rmatch a✝ y = true
⊢ y ∈ S → y ∈ matches' a✝ ∧ ¬y = []
rw [← ih y]
no goals
case mp.intro.intro
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
ih : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
S : List (List α)
hx : x = join S
y : List α
hS : y ∈ S → ¬y = [] ∧ rmatch a✝ y = true
⊢ y ∈ S → rmatch a✝ y = true ∧ ¬y = []
tauto
case mpr.intro.intro
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
ih : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
S : List (List α)
hx : x = join S
y : List α
hS : y ∈ S → y ∈ matches' a✝ ∧ ¬y = []
⊢ y ∈ S → ¬y = [] ∧ y ∈ matches' a✝
case mpr.intro.intro
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
ih : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
S : List (List α)
hx : x = join S
y : List α
hS : y ∈ S → y ∈ matches' a✝ ∧ ¬y = []
⊢ y ∈ S → ¬y = [] ∧ rmatch a✝ y = true
rw [ih y]
no goals
case mpr.intro.intro
α : Type u_1
β : Type ?u.80627
γ : Type ?u.80630
dec : DecidableEq α
a b : α
a✝ : RegularExpression α
ih : ∀ (x : List α), rmatch a✝ x = true ↔ x ∈ matches' a✝
x : List α
S : List (List α)
hx : x = join S
y : List α
hS : y ∈ S → y ∈ matches' a✝ ∧ ¬y = []
⊢ y ∈ S → ¬y = [] ∧ y ∈ matches' a✝
tauto