pith. machine review for the scientific record. sign in
lemma

exists_candidate_index

proved
show as:
view math explainer →
module
IndisputableMonolith.Foundation.Atomicity
domain
Foundation
line
322 · github
papers citing
none yet

open explainer

Read the cached plain-language explainer.

open lean source

IndisputableMonolith.Foundation.Atomicity on GitHub at line 322.

browse module

All declarations in this module, on Recognition.

explainer page

A cached Ask Recognition explainer exists for this declaration.

open explainer

depends on

used by

formal source

 319  not_mem : event ∉ picked
 320  eligible_event : eligible (ev:=ev) picked event
 321
 322lemma exists_candidate_index (picked : Finset E.Event)
 323    (h : ∃ e, e ∉ picked) :
 324    ∃ n, enum (E:=E) n ∉ picked ∧ eligible (ev:=ev) picked (enum (E:=E) n) := by
 325  classical
 326  obtain ⟨e, heNot, helig⟩ := exists_minimal_eligible (ev:=ev) (E:=E) picked h
 327  obtain ⟨n, hn⟩ := enum_surjective (E:=E) e
 328  refine ⟨n, ?_, ?_⟩
 329  · simpa [hn]
 330  · simpa [hn] using helig
 331
 332noncomputable def chooseCandidate (picked : Finset E.Event) :
 333    Option (Candidate (ev:=ev) (E:=E) picked) :=
 334  if h : ∃ e, e ∉ picked then
 335    let hx := exists_candidate_index (ev:=ev) (E:=E) picked h
 336    let n := Nat.find hx
 337    let hn := Nat.find_spec hx
 338    let e := enum (E:=E) n
 339    some
 340      { idx := n
 341      , event := e
 342      , event_def := rfl
 343      , not_mem := hn.left
 344      , eligible_event := hn.right }
 345  else
 346    none
 347
 348lemma chooseCandidate_none_iff (picked : Finset E.Event) :
 349    chooseCandidate (ev:=ev) (E:=E) picked = none ↔
 350      ¬∃ e, e ∉ picked := by
 351  classical
 352  unfold chooseCandidate