@[reducible, inline]
Equations
- DY.ErasableProofEntry.default ExecEntryT = { erase := fun (x : ExecEntryT) => x }
Instances For
- ProofT : Type
Instances
Instances For
@[instance_reducible]
Equations
- DY.instErasableProofEntryEntryEntry = { erase := fun (entry : DY.ProofTrace.Entry) => DY.ErasableProofEntry.erase entry }
@[reducible, inline]
Equations
Instances For
Equations
- entry.erase = DY.ErasableProofEntry.erase entry
Instances For
Equations
- DY.Trace.nil.erase = DY.Trace.nil
- (trBefore.snoc entry).erase = DY.Trace.snoc trBefore.erase entry.erase
Instances For
@[simp]
theorem
DY.Trace.erase_at
[ExecTraceTypes]
[ProofTraceTypes]
(tr : ProofTrace)
(i : Nat)
(h_i : i < length (erase tr))
:
@[simp]
class
DY.ProofTraceTypes.Has
[ExecTraceTypes]
[ProofTraceTypes]
{ExecEntryT : outParam Type}
(ProofEntryT : Type)
[ErasableProofEntry ExecEntryT ProofEntryT]
[ExecTraceTypes.Has ExecEntryT]
extends DY.TraceEntryHas ProofEntryT DY.ProofTrace.Entry :
- inj : ProofEntryT → ProofTrace.Entry
- proj : ProofTrace.Entry → Option ProofEntryT
- proj_none_eq_erase (x : ProofTrace.Entry) : (TraceEntryHas.proj x = none) = (TraceEntryHas.proj x.erase = none)
- erase_commutes (entry : ProofEntryT) : (TraceEntryHas.inj entry).erase = TraceEntryHas.inj (ErasableProofEntry.erase entry)
Instances
class
DY.ProofTraceTypes.HasStep
{ExecEntryT1 ExecEntryT2 : outParam Type}
(ProofEntryT1 : Type)
(ProofEntryT2 : semiOutParam Type)
[ErasableProofEntry ExecEntryT1 ProofEntryT1]
[ErasableProofEntry ExecEntryT2 ProofEntryT2]
[ExecTraceTypes.HasStep ExecEntryT1 ExecEntryT2]
:
- proofInj : ProofEntryT1 → ProofEntryT2
- proofProj : ProofEntryT2 → Option ProofEntryT1
- proofProj_none_eq_erase (x : ProofEntryT2) : (proofProj x = none) = (ExecTraceTypes.HasStep.proj (ErasableProofEntry.erase x) = none)
- erase_commutes (entry : ProofEntryT1) : ErasableProofEntry.erase (proofInj entry) = ExecTraceTypes.HasStep.inj (ErasableProofEntry.erase entry)
Instances
@[instance_reducible]
Equations
- One or more equations did not get rendered due to their size.
@[instance_reducible]
instance
DY.instProofTraceTypesHasStep
[ExecTraceTypes]
[ProofTraceTypes]
{ExecEntryT1 ExecEntryT2 : Type}
(ProofEntryT1 ProofEntryT2 : Type)
[ErasableProofEntry ExecEntryT1 ProofEntryT1]
[ErasableProofEntry ExecEntryT2 ProofEntryT2]
[ExecTraceTypes.HasStep ExecEntryT1 ExecEntryT2]
[ProofTraceTypes.HasStep ProofEntryT1 ProofEntryT2]
[ExecTraceTypes.Has ExecEntryT2]
[ProofTraceTypes.Has ProofEntryT2]
:
ProofTraceTypes.Has ProofEntryT1
Equations
- One or more equations did not get rendered due to their size.
@[instance_reducible]
instance
DY.instErasableProofEntryCombine
{n : Nat}
(ExecTypes ProofTypes : Fin n → Type)
[(id : Fin n) → ErasableProofEntry (ExecTypes id) (ProofTypes id)]
:
ErasableProofEntry (ExecTraceTypes.combine ExecTypes) (ProofTraceTypes.combine ProofTypes)
Equations
- One or more equations did not get rendered due to their size.
@[instance_reducible]
instance
DY.instProofTraceTypesCombineHasStep
{n : Nat}
(ExecTypes ProofTypes : Fin n → Type)
[(id : Fin n) → ErasableProofEntry (ExecTypes id) (ProofTypes id)]
(id : Fin n)
:
ProofTraceTypes.HasStep (ProofTypes id) (ProofTraceTypes.combine ProofTypes)
Equations
- One or more equations did not get rendered due to their size.
theorem
DY.ProofTrace.Entry.erase_eq_imp_exists
[ExecTraceTypes]
[ProofTraceTypes]
{ExecEntryT ProofEntryT : Type}
[ErasableProofEntry ExecEntryT ProofEntryT]
[ExecEntryAssociatedWithProofEntry ExecEntryT ProofEntryT]
[ExecTraceTypes.Has ExecEntryT]
[ProofTraceTypes.Has ProofEntryT]
{entry : Entry}
{result : ExecEntryT}
:
entry.erase = TraceEntryHas.inj result ↔ ∃ (result' : ProofEntryT), entry = TraceEntryHas.inj result' ∧ ErasableProofEntry.erase result' = result
theorem
DY.ProofTrace.Entry.at?_eq_none_erase
[ExecTraceTypes]
[ProofTraceTypes]
{ExecEntryT ProofEntryT : Type}
[ErasableProofEntry ExecEntryT ProofEntryT]
[ExecTraceTypes.Has ExecEntryT]
[ProofTraceTypes.Has ProofEntryT]
(tr : ProofTrace)
(i : Nat)
:
theorem
DY.ProofTrace.Entry.at?_eq_some_erase
[ExecTraceTypes]
[ProofTraceTypes]
{ExecEntryT ProofEntryT : Type}
[ErasableProofEntry ExecEntryT ProofEntryT]
[ExecTraceTypes.Has ExecEntryT]
[ProofTraceTypes.Has ProofEntryT]
(tr : ProofTrace)
(i : Nat)
(entry : ProofEntryT)
:
Trace.at? tr i = some entry → Trace.at? (Trace.erase tr) i = some (ErasableProofEntry.erase entry)
theorem
DY.Trace.append_erase
[ExecTraceTypes]
[ProofTraceTypes]
{ExecEntryT ProofEntryT : Type}
[ErasableProofEntry ExecEntryT ProofEntryT]
[ExecTraceTypes.Has ExecEntryT]
[ProofTraceTypes.Has ProofEntryT]
(tr : ProofTrace)
(entry : ProofEntryT)
:
class
DY.SubTraceInvariant
[ExecTraceTypes]
[ProofTraceTypes]
{ExecEntryT : outParam Type}
(ProofEntryT : Type)
[ErasableProofEntry ExecEntryT ProofEntryT]
:
- invariant : ProofTrace → ProofEntryT → Prop
Instances
- tc_inv : SubTraceInvariant ProofTrace.Entry
Instances
@[instance_reducible]
def
DY.ProofTrace.Entry.Invariant
[ExecTraceTypes]
[ProofTraceTypes]
[TraceInvariant]
(trBefore : ProofTrace)
(entry : Entry)
:
Equations
- DY.ProofTrace.Entry.Invariant trBefore entry = DY.SubTraceInvariant.invariant trBefore entry
Instances For
Equations
- DY.Trace.nil.Invariant = True
- (trBefore.snoc entry).Invariant = (trBefore.Invariant ∧ DY.ProofTrace.Entry.Invariant trBefore entry)
Instances For
class
DY.TraceInvariant.Has
[ExecTraceTypes]
[ProofTraceTypes]
[TraceInvariant]
{ExecEntryT : outParam Type}
(ProofEntryT : Type)
[ErasableProofEntry ExecEntryT ProofEntryT]
[ExecTraceTypes.Has ExecEntryT]
[ProofTraceTypes.Has ProofEntryT]
[SubTraceInvariant ProofEntryT]
:
- inv_commutes (trBefore : ProofTrace) (entry : ProofEntryT) : ProofTrace.Entry.Invariant trBefore (TraceEntryHas.inj entry) = SubTraceInvariant.invariant trBefore entry
Instances
class
DY.TraceInvariant.HasStep
[ExecTraceTypes]
[ProofTraceTypes]
{ExecEntryT1 ExecEntryT2 : outParam Type}
(ProofEntryT1 ProofEntryT2 : Type)
[ErasableProofEntry ExecEntryT1 ProofEntryT1]
[ErasableProofEntry ExecEntryT2 ProofEntryT2]
[ExecTraceTypes.HasStep ExecEntryT1 ExecEntryT2]
[ProofTraceTypes.HasStep ProofEntryT1 ProofEntryT2]
[SubTraceInvariant ProofEntryT1]
[SubTraceInvariant ProofEntryT2]
:
- inv_commutes (trBefore : ProofTrace) (entry : ProofEntryT1) : SubTraceInvariant.invariant trBefore (ProofTraceTypes.HasStep.proofInj entry) = SubTraceInvariant.invariant trBefore entry
Instances
instance
DY.instTraceInvariantHasStep
[ExecTraceTypes]
[ProofTraceTypes]
[TraceInvariant]
{ExecEntryT1 ProofEntryT1 ExecEntryT2 ProofEntryT2 : Type}
[ErasableProofEntry ExecEntryT1 ProofEntryT1]
[ErasableProofEntry ExecEntryT2 ProofEntryT2]
[ExecTraceTypes.HasStep ExecEntryT1 ExecEntryT2]
[ProofTraceTypes.HasStep ProofEntryT1 ProofEntryT2]
[ExecTraceTypes.Has ExecEntryT2]
[ProofTraceTypes.Has ProofEntryT2]
[SubTraceInvariant ProofEntryT1]
[SubTraceInvariant ProofEntryT2]
[TraceInvariant.HasStep ProofEntryT1 ProofEntryT2]
[TraceInvariant.Has ProofEntryT2]
:
TraceInvariant.Has ProofEntryT1
@[instance_reducible]
instance
DY.SubTraceInvariant.combine
[ExecTraceTypes]
[ProofTraceTypes]
{n : Nat}
{ExecTypes ProofTypes : Fin n → Type}
[(id : Fin n) → ErasableProofEntry (ExecTypes id) (ProofTypes id)]
[(id : Fin n) → SubTraceInvariant (ProofTypes id)]
:
SubTraceInvariant (ProofTraceTypes.combine ProofTypes)
Equations
- One or more equations did not get rendered due to their size.
instance
DY.instTraceInvariantCombineHasStep
[ExecTraceTypes]
[ProofTraceTypes]
{n : Nat}
{ExecTypes : Fin n → Type}
(ProofTypes : Fin n → Type)
[(id : Fin n) → ErasableProofEntry (ExecTypes id) (ProofTypes id)]
[(id : Fin n) → SubTraceInvariant (ProofTypes id)]
(id : Fin n)
:
TraceInvariant.HasStep (ProofTypes id) (ProofTraceTypes.combine ProofTypes)
theorem
DY.Trace.invariant_append
[ExecTraceTypes]
[ProofTraceTypes]
[TraceInvariant]
{ExecEntryT ProofEntryT : Type}
[ErasableProofEntry ExecEntryT ProofEntryT]
[ExecTraceTypes.Has ExecEntryT]
[ProofTraceTypes.Has ProofEntryT]
[SubTraceInvariant ProofEntryT]
[TraceInvariant.Has ProofEntryT]
(tr : ProofTrace)
(entry : ProofEntryT)
:
theorem
DY.Trace.invariant_at
[ExecTraceTypes]
[ProofTraceTypes]
[TraceInvariant]
(tr : ProofTrace)
(i : Nat)
(h_i : i < length tr)
:
Invariant tr → ProofTrace.Entry.Invariant («prefix» tr i) («at» tr i h_i)