Theorem: KolmogorovStreams.check_decent_words (Compfiles/KolmogorovStreams.lean)

State before:
α : Type
is_decent : List α → Prop
a : Stream' α
hinit : all_prefixes is_decent a
hnot : ∀ (n : ℕ), ∃ k, 0 < k ∧ all_prefixes is_decent (Stream'.drop (n + k) a)
⊢ Stream'.All is_decent (break_into_words (fun i => ((choose_decent_words is_decent a hinit hnot).get i).length) a)
Tactic:
rw [break_into_words_closed_form]
State after:
α : Type
is_decent : List α → Prop
a : Stream' α
hinit : all_prefixes is_decent a
hnot : ∀ (n : ℕ), ∃ k, 0 < k ∧ all_prefixes is_decent (Stream'.drop (n + k) a)
⊢ Stream'.All is_decent fun i =>
    Stream'.take ((choose_decent_words is_decent a hinit hnot).get i).length
      (Stream'.drop (∑ j ∈ Finset.range i, ((choose_decent_words is_decent a hinit hnot).get j).length) a)

State before:
α : Type
is_decent : List α → Prop
a : Stream' α
hinit : all_prefixes is_decent a
hnot : ∀ (n : ℕ), ∃ k, 0 < k ∧ all_prefixes is_decent (Stream'.drop (n + k) a)
⊢ Stream'.All is_decent fun i =>
    Stream'.take ((choose_decent_words is_decent a hinit hnot).get i).length
      (Stream'.drop (∑ j ∈ Finset.range i, ((choose_decent_words is_decent a hinit hnot).get j).length) a)
Tactic:
simp_rw [←chosen_decent_closed_form]
State after:
α : Type
is_decent : List α → Prop
a : Stream' α
hinit : all_prefixes is_decent a
hnot : ∀ (n : ℕ), ∃ k, 0 < k ∧ all_prefixes is_decent (Stream'.drop (n + k) a)
⊢ Stream'.All is_decent fun i =>
    Stream'.take ((choose_decent_words is_decent a hinit hnot).get i).length
      (Stream'.drop ((choose_decent_words is_decent a hinit hnot).get i).start a)

State before:
α : Type
is_decent : List α → Prop
a : Stream' α
hinit : all_prefixes is_decent a
hnot : ∀ (n : ℕ), ∃ k, 0 < k ∧ all_prefixes is_decent (Stream'.drop (n + k) a)
⊢ Stream'.All is_decent fun i =>
    Stream'.take ((choose_decent_words is_decent a hinit hnot).get i).length
      (Stream'.drop ((choose_decent_words is_decent a hinit hnot).get i).start a)
Tactic:
intro j
State after:
α : Type
is_decent : List α → Prop
a : Stream' α
hinit : all_prefixes is_decent a
hnot : ∀ (n : ℕ), ∃ k, 0 < k ∧ all_prefixes is_decent (Stream'.drop (n + k) a)
j : ℕ
⊢ is_decent
    (Stream'.get
      (fun i =>
        Stream'.take ((choose_decent_words is_decent a hinit hnot).get i).length
          (Stream'.drop ((choose_decent_words is_decent a hinit hnot).get i).start a))
      j)

State before:
α : Type
is_decent : List α → Prop
a : Stream' α
hinit : all_prefixes is_decent a
hnot : ∀ (n : ℕ), ∃ k, 0 < k ∧ all_prefixes is_decent (Stream'.drop (n + k) a)
j : ℕ
⊢ is_decent
    (Stream'.get
      (fun i =>
        Stream'.take ((choose_decent_words is_decent a hinit hnot).get i).length
          (Stream'.drop ((choose_decent_words is_decent a hinit hnot).get i).start a))
      j)
Tactic:
exact ((choose_decent_words is_decent a hinit hnot).get j).h
State after:
no goals