def
DY.ProtocolEvent.baseAttackerKnowledge
[BytesFunctor]
[ExecTraceTypes]
(EventT : Type)
:
SubBaseAttackerKnowledge (ExecEntryT EventT)
Equations
- DY.ProtocolEvent.baseAttackerKnowledge EventT = { attackerKnows := fun (x : DY.ExecTrace) (x_1 : DY.ProtocolEvent.ExecEntryT EventT) (x_2 : DY.Bytes) => False }
Instances For
@[reducible, inline]
Equations
- DY.ProtocolEvent.ProofEntryT EventT = DY.ProtocolEvent.ExecEntryT EventT
Instances For
@[instance_reducible]
instance
DY.ProtocolEvent.instErasableProofEntryExecEntryTProofEntryT
(EventT : Type)
:
ErasableProofEntry (ExecEntryT EventT) (ProofEntryT EventT)
@[instance_reducible]
instance
DY.ProtocolEvent.instExecEntryAssociatedWithProofEntryExecEntryTProofEntryT
(EventT : Type)
:
ExecEntryAssociatedWithProofEntry (ExecEntryT EventT) (ProofEntryT EventT)
- invariant : ProofTrace → EventT → Prop
Instances
@[instance_reducible]
instance
DY.ProtocolEvent.instSubTraceInvariantExecEntryTProofEntryTOfEventInv
[ExecTraceTypes]
[ProofTraceTypes]
(EventT : Type)
[EventInv EventT]
:
SubTraceInvariant (ProofEntryT EventT)
Equations
- One or more equations did not get rendered due to their size.
instance
DY.ProtocolEvent.baseAttackerKnowledgeTheorem
[ExecTraceTypes]
[ProofTraceTypes]
[TraceInvariant]
[BytesFunctor]
[BytesInvariants]
(EventT : Type)
[ExecTraceTypes.Has (ExecEntryT EventT)]
[ProofTraceTypes.Has (ProofEntryT EventT)]
[EventInv EventT]
[TraceInvariant.Has (ProofEntryT EventT)]
:
SubBaseAttackerKnowledgeTheorem (ProofEntryT EventT) (baseAttackerKnowledge EventT)
def
DY.Trace.EventLoggedAt
{EventT : Type}
[ExecTraceTypes]
[ExecTraceTypes.Has (ProtocolEvent.ExecEntryT EventT)]
(ev : EventT)
(time : Nat)
(tr : ExecTrace)
:
Equations
- DY.Trace.EventLoggedAt ev time tr = (DY.Trace.at? tr time = some { ev := ev })
Instances For
theorem
DY.Trace.EventLoggedAt_implies_i_le_length
{EventT : Type}
[ExecTraceTypes]
[ExecTraceTypes.Has (ProtocolEvent.ExecEntryT EventT)]
(ev : EventT)
(i : Nat)
(tr : ExecTrace)
:
EventLoggedAt ev i tr → i < length tr
def
DY.Trace.getEventAt
(EventT : Type)
[ExecTraceTypes]
[ExecTraceTypes.Has (ProtocolEvent.ExecEntryT EventT)]
(i : Nat)
(tr : ExecTrace)
:
Option EventT
Equations
- DY.Trace.getEventAt EventT i tr = match DY.Trace.at? tr i with | none => none | some entry => some entry.ev
Instances For
theorem
DY.Trace.EventLoggedAt_eq_getEventAt
{EventT : Type}
[ExecTraceTypes]
[ExecTraceTypes.Has (ProtocolEvent.ExecEntryT EventT)]
(ev : EventT)
(i : Nat)
(tr : ExecTrace)
:
theorem
DY.Trace.EventLoggedAt_le
{EventT : Type}
[ExecTraceTypes]
[ExecTraceTypes.Has (ProtocolEvent.ExecEntryT EventT)]
(ev : EventT)
(time : Nat)
(tr1 tr2 : ExecTrace)
:
tr1 ≤ tr2 → EventLoggedAt ev time tr1 → EventLoggedAt ev time tr2
theorem
DY.Trace.EventLoggedAt_le'
{EventT : Type}
[ExecTraceTypes]
[ExecTraceTypes.Has (ProtocolEvent.ExecEntryT EventT)]
(ev : EventT)
(time : Nat)
(tr1 tr2 : ExecTrace)
:
time < length tr1 → tr1 ≤ tr2 → EventLoggedAt ev time tr2 → EventLoggedAt ev time tr1
def
DY.Trace.EventLogged
{EventT : Type}
[ExecTraceTypes]
[ExecTraceTypes.Has (ProtocolEvent.ExecEntryT EventT)]
(ev : EventT)
(tr : ExecTrace)
:
Equations
- DY.Trace.EventLogged ev tr = ∃ (i : Nat), DY.Trace.EventLoggedAt ev i tr
Instances For
theorem
DY.Trace.EventLogged_le
{EventT : Type}
[ExecTraceTypes]
[ExecTraceTypes.Has (ProtocolEvent.ExecEntryT EventT)]
(ev : EventT)
(tr1 tr2 : ExecTrace)
:
tr1 ≤ tr2 → EventLogged ev tr1 → EventLogged ev tr2
theorem
DY.Trace.EventLoggedAt_imp_EventInv
{EventT : Type}
[ExecTraceTypes]
[ProofTraceTypes]
[TraceInvariant]
[ProtocolEvent.EventInv EventT]
[ExecTraceTypes.Has (ProtocolEvent.ExecEntryT EventT)]
[ProofTraceTypes.Has (ProtocolEvent.ProofEntryT EventT)]
[TraceInvariant.Has (ProtocolEvent.ProofEntryT EventT)]
(ev : EventT)
(i : Nat)
(tr : ProofTrace)
:
Invariant tr → EventLoggedAt ev i (erase tr) → ProtocolEvent.EventInv.invariant («prefix» tr i) ev
theorem
DY.Trace.EventLogged_imp_EventInv
{EventT : Type}
[ExecTraceTypes]
[ProofTraceTypes]
[TraceInvariant]
[ProtocolEvent.EventInv EventT]
[ExecTraceTypes.Has (ProtocolEvent.ExecEntryT EventT)]
[ProofTraceTypes.Has (ProtocolEvent.ProofEntryT EventT)]
[TraceInvariant.Has (ProtocolEvent.ProofEntryT EventT)]
(ev : EventT)
(tr : ProofTrace)
:
def
DY.ProtocolEvent.logEvent
{EventT : Type}
[ExecTraceTypes]
[ExecTraceTypes.Has (ExecEntryT EventT)]
(ev : EventT)
:
Equations
- DY.ProtocolEvent.logEvent ev = do let _ ← DY.appendEntry { ev := ev } pure ()
Instances For
instance
DY.ProtocolEvent.logEvent.spec
{EventT : Type}
[ExecTraceTypes]
[ProofTraceTypes]
[TraceInvariant]
[EventInv EventT]
[ExecTraceTypes.Has (ExecEntryT EventT)]
[ProofTraceTypes.Has (ProofEntryT EventT)]
[TraceInvariant.Has (ProofEntryT EventT)]
(ev : EventT)
:
HoareTriple (logEvent ev) (fun (tr : ProofTrace) => EventInv.invariant tr ev) fun (x : Unit) (tr : ProofTrace) =>
Trace.EventLogged ev (Trace.erase tr)
def
DY.ProtocolEvent.label
{EventT : Type}
[ExecTraceTypes]
[ExecTraceTypes.Has (ExecEntryT EventT)]
(ev : EventT)
:
Equations
- DY.ProtocolEvent.label ev = { isCorrupt := fun (tr : DY.ExecTrace) => DY.Trace.EventLogged ev tr, isCorruptLater := ⋯ }
Instances For
theorem
DY.ProtocolEvent.label_isCorrupt
{EventT : Type}
[ExecTraceTypes]
[ExecTraceTypes.Has (ExecEntryT EventT)]
(ev : EventT)
(tr : ExecTrace)
: