LeanMachineLearning exposition

Learning.stepsUntil_eq_dite๐Ÿ”—

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

stepsUntil_eq_dite๐Ÿ”—

LemmaLearning.stepsUntil_eq_dite

No docstring.

๐Ÿ”—theorem
Learning.stepsUntil_eq_dite.{u_1, u_3} {๐“ : Type u_1} {ฮฉ : Type u_3} [DecidableEq ๐“] {A : โ„• โ†’ ฮฉ โ†’ ๐“} (a : ๐“) (m : โ„•) (ฯ‰ : ฮฉ) [Decidable (โˆƒ s, pullCount A a (s + 1) ฯ‰ = m)] : stepsUntil A a m ฯ‰ = if h : โˆƒ s, pullCount A a (s + 1) ฯ‰ = m then โ†‘(Nat.find h) else โŠค
Learning.stepsUntil_eq_dite.{u_1, u_3} {๐“ : Type u_1} {ฮฉ : Type u_3} [DecidableEq ๐“] {A : โ„• โ†’ ฮฉ โ†’ ๐“} (a : ๐“) (m : โ„•) (ฯ‰ : ฮฉ) [Decidable (โˆƒ s, pullCount A a (s + 1) ฯ‰ = m)] : stepsUntil A a m ฯ‰ = if h : โˆƒ s, pullCount A a (s + 1) ฯ‰ = m then โ†‘(Nat.find h) else โŠค

Code

lemma stepsUntil_eq_dite (a : ๐“) (m : โ„•) (ฯ‰ : ฮฉ)
    [Decidable (โˆƒ s, pullCount A a (s + 1) ฯ‰ = m)] :
    stepsUntil A a m ฯ‰ =
      if h : โˆƒ s, pullCount A a (s + 1) ฯ‰ = m then (Nat.find h : โ„•โˆž) else โŠค
Type uses (2)
Used by (7)

Actions: Source ยท Open Issue

Proof
by
  unfold stepsUntil
  split_ifs with h'
  ยท refine le_antisymm ?_ ?_
    ยท refine sInf_le ?_
      simpa using Nat.find_spec h'
    ยท simp only [le_sInf_iff, Set.mem_image, Set.mem_setOf_eq, forall_exists_index, and_imp,
        forall_apply_eq_imp_iffโ‚‚, Nat.cast_le, Nat.find_le_iff]
      exact fun n hn โ†ฆ โŸจn, le_rfl, hnโŸฉ
  ยท push Not at h'
    suffices {s | pullCount A a (s + 1) ฯ‰ = m} = โˆ… by simp [this]
    ext s
    simpa using (h' s)

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