Documentation

Cryptlib.Protocols.GroupComm.GroupChatKatzenqt1.Member.MemberProofs

A member keeps every reader's invariant #

ReadersOK: every reader of a member is filed under its own stream and satisfies Inv for some history. Every call on a member keeps it, given well-formed walk reports (Event.WF).

A reader filed under m reads m's stream and keeps what is true of some history.

Equations
  • One or more equations did not get rendered due to their size.
Instances For
    Equations
    • One or more equations did not get rendered due to their size.
    Instances For

      p keeps every reader OK.

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For

        Keeping is closed under the state monad #

        theorem Cryptlib.Protocols.GroupComm.GroupChatKatzenqt1.Member.Keeps.bind {α β : Type} {p : GM α} {f : α → GM β} (hp : Keeps p) (hf : ∀ (a : α), Keeps (f a)) :
        Keeps (p >>= f)
        theorem Cryptlib.Protocols.GroupComm.GroupChatKatzenqt1.Member.Keeps.map {α β : Type} {p : GM α} (f : α → β) (hp : Keeps p) :
        Keeps (f <$> p)

        Readers #

        theorem Cryptlib.Protocols.GroupComm.GroupChatKatzenqt1.Member.Good.congr {m : Key} {r r' : Reader} (h : Good m r) (hs : r'.stream = r.stream) (hp : r'.passed = r.passed) (hk : r'.kept = r.kept) (hl : r'.lost = r.lost) (hla : r'.last = r.last) :
        Good m r'

        Inv depends only on what a reader keeps, so a reader that keeps the same is as good.

        theorem Cryptlib.Protocols.GroupComm.GroupChatKatzenqt1.Member.good_scan {m : Key} {r : Reader} (h : Good m r) (heard : List ℕ) (w : ℕ) :
        Good m (r.scan heard w).1
        theorem Cryptlib.Protocols.GroupComm.GroupChatKatzenqt1.Member.good_found {m : Key} {r : Reader} (h : Good m r) (index : Index) (result : ReadResult) (next : Option Index) (w : ℕ) :
        Good m (r.found index result next w).2.1

        What a driver reports of a walk is possible: it kept no more boxes than it stepped past.

        Equations
        Instances For
          theorem Cryptlib.Protocols.GroupComm.GroupChatKatzenqt1.Member.good_walked {m : Key} {r : Reader} (h : Good m r) (target : Option Index) (skipped : List Index) (steps w : ℕ) (hwf : WalkWF skipped steps) :
          Good m (r.walked target skipped steps w).1

          Each function of a member #

          theorem Cryptlib.Protocols.GroupComm.GroupChatKatzenqt1.Member.foldl_frame {β : Type} (step : Group → β → Group) (hs : ∀ (g : Group) (x : β), (step g x).readers = g.readers) (l : List β) (g : Group) :

          modify of a function that leaves readers alone.

          Equations
          • One or more equations did not get rendered due to their size.
          Instances For

            Writing #

            Membership and time #

            Every call on a member #

            What a driver reports is possible: a walk kept no more boxes than it stepped past.

            Equations
            Instances For

              Starting #

              theorem Cryptlib.Protocols.GroupComm.GroupChatKatzenqt1.Member.Keeps.foldlM {β : Type} {f : Unit → β → GM Unit} (hf : ∀ (x : β), Keeps (f () x)) (l : List β) :

              Acknowledgements sent #

              A member as calls on it can leave it, from its start.

              Instances For
                theorem Cryptlib.Protocols.GroupComm.GroupChatKatzenqt1.Member.acks_sent_safe {g : Group} (hg : Reachable g) (p : Pending) (x : ℕ × ℕ) :
                x ∈ (g.acksOf p).1 → ∃ (m : Key) (r : Reader) (h : History) (b : Index), (x.1, some m) ∈ g.rosters.known g.me ∧ g.readers.get? m = some r ∧ r.stream = m ∧ Inv r h ∧ counter b = x.2 ∧ Safe h (some b)

                Every acknowledgement a reachable member sends names a box its reader of that stream read, along with every box before it.