LeanMachineLearning exposition

Learning.pullCount_lt_of_le_stepsUntil๐Ÿ”—

This page has the declaration's own card below, then its dependency graph, then a card for each dependency (type dependencies first, then the rest of the transitive closure). For a theorem, the graph and the dependency cards only follow its statement's dependencies (its proof is replaced by sorry, so what it proves doesn't depend on how); for everything else, both the type and the body/value are followed, since their content is part of what later declarations build on.

Minimal Lean file

pullCount_lt_of_le_stepsUntil๐Ÿ”—

LemmaLearning.pullCount_lt_of_le_stepsUntil

No docstring.

๐Ÿ”—theorem
Learning.pullCount_lt_of_le_stepsUntil.{u_1, u_3} {๐“ : Type u_1} {ฮฉ : Type u_3} [DecidableEq ๐“] {A : โ„• โ†’ ฮฉ โ†’ ๐“} (a : ๐“) {n m : โ„•} (ฯ‰ : ฮฉ) (h_exists : โˆƒ s, pullCount A a (s + 1) ฯ‰ = m) (hn : โ†‘n < stepsUntil A a m ฯ‰) : pullCount A a (n + 1) ฯ‰ < m
Learning.pullCount_lt_of_le_stepsUntil.{u_1, u_3} {๐“ : Type u_1} {ฮฉ : Type u_3} [DecidableEq ๐“] {A : โ„• โ†’ ฮฉ โ†’ ๐“} (a : ๐“) {n m : โ„•} (ฯ‰ : ฮฉ) (h_exists : โˆƒ s, pullCount A a (s + 1) ฯ‰ = m) (hn : โ†‘n < stepsUntil A a m ฯ‰) : pullCount A a (n + 1) ฯ‰ < m

Code

lemma pullCount_lt_of_le_stepsUntil (a : ๐“) {n m : โ„•} (ฯ‰ : ฮฉ)
    (h_exists : โˆƒ s, pullCount A a (s + 1) ฯ‰ = m) (hn : n < stepsUntil A a m ฯ‰) :
    pullCount A a (n + 1) ฯ‰ < m
Type uses (2)
Body uses (4)
Used by (1)

Actions: Source ยท Open Issue

Proof
by
  classical
  have h_eq := stepsUntil_eq_dite (A := A) a m ฯ‰
  simp only [h_exists, โ†“reduceDIte] at h_eq
  rw [โ† ENat.coe_toNat (stepsUntil_ne_top h_exists)] at hn
  refine lt_of_le_of_ne ?_ ?_
  ยท calc pullCount A a (n + 1) ฯ‰
    _ โ‰ค pullCount A a (stepsUntil A a m ฯ‰ + 1).toNat ฯ‰ := by
      refine monotone_pullCount a ฯ‰ ?_
      rw [ENat.toNat_add (stepsUntil_ne_top h_exists) (by simp)]
      simp only [ENat.toNat_one, add_le_add_iff_right]
      exact mod_cast hn.le
    _ = m := pullCount_stepsUntil_add_one h_exists
  ยท refine Nat.find_min h_exists (m := n) ?_
    suffices n < (stepsUntil A a m ฯ‰).toNat by
      rwa [h_eq, ENat.toNat_coe] at this
    exact mod_cast hn

Dependency graph

Type dependencies (2)

pullCount๐Ÿ”—

DefinitionLearning.pullCount

Number of times action a was chosen up to time t (excluding t).

๐Ÿ”—def
Learning.pullCount.{u_1, u_3} {๐“ : Type u_1} {ฮฉ : Type u_3} [DecidableEq ๐“] (A : โ„• โ†’ ฮฉ โ†’ ๐“) (a : ๐“) (t : โ„•) (ฯ‰ : ฮฉ) : โ„•
Learning.pullCount.{u_1, u_3} {๐“ : Type u_1} {ฮฉ : Type u_3} [DecidableEq ๐“] (A : โ„• โ†’ ฮฉ โ†’ ๐“) (a : ๐“) (t : โ„•) (ฯ‰ : ฮฉ) : โ„•

Code

noncomputable
def pullCount (A : โ„• โ†’ ฮฉ โ†’ ๐“) (a : ๐“) (t : โ„•) (ฯ‰ : ฮฉ) : โ„• :=
  #(filter (fun s โ†ฆ A s ฯ‰ = a) (range t))
Used by (146)

Actions: Source ยท Open Issue

stepsUntil๐Ÿ”—

DefinitionLearning.stepsUntil

Number of steps until action a was pulled exactly m times.

๐Ÿ”—def
Learning.stepsUntil.{u_1, u_3} {๐“ : Type u_1} {ฮฉ : Type u_3} [DecidableEq ๐“] (A : โ„• โ†’ ฮฉ โ†’ ๐“) (a : ๐“) (m : โ„•) (ฯ‰ : ฮฉ) : โ„•โˆž
Learning.stepsUntil.{u_1, u_3} {๐“ : Type u_1} {ฮฉ : Type u_3} [DecidableEq ๐“] (A : โ„• โ†’ ฮฉ โ†’ ๐“) (a : ๐“) (m : โ„•) (ฯ‰ : ฮฉ) : โ„•โˆž

Code

noncomputable
def stepsUntil (A : โ„• โ†’ ฮฉ โ†’ ๐“) (a : ๐“) (m : โ„•) (ฯ‰ : ฮฉ) : โ„•โˆž :=
  sInf ((โ†‘) '' {s | pullCount A a (s + 1) ฯ‰ = m})
Body uses (1)
Used by (46)

Actions: Source ยท Open Issue