Built with Alectryon, running Coq+SerAPI v8.18.0+0.18.1. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
[Loading ML file ring_plugin.cmxs (using legacy method) ... done]
[Loading ML file ssrmatching_plugin.cmxs (using legacy method) ... done]
[Loading ML file ssreflect_plugin.cmxs (using legacy method) ... done]
Set Implicit Arguments.Unset Strict Implicit.ImportPrenex Implicits.
Utility: Properties of Possibly-Infinite Traces Requiring Classical Logic
Sectionsec_trace_classical_properties.Context {AB : Type}.#[local] Notationtrace := (@trace A B).#[local] NotationpropT := (@propT A B).
Relating finiteness and infiniteness
A, B: Type
foralltr : trace, ~ infiniteT tr -> finiteT tr
A, B: Type
foralltr : trace, ~ infiniteT tr -> finiteT tr
A, B: Type tr: trace Hnot: ~ infiniteT tr
finiteT tr
A, B: Type tr: trace Hnot: ~ infiniteT tr Hinf: ~ finiteT tr
finiteT tr
A, B: Type tr: trace Hinf: ~ finiteT tr
infiniteT tr
exact: not_finiteT_infiniteT.Qed.
A, B: Type
foralltr : trace, finiteT tr \/ infiniteT tr
A, B: Type
foralltr : trace, finiteT tr \/ infiniteT tr
A, B: Type tr: trace
finiteT tr \/ infiniteT tr
A, B: Type tr: trace Hinf: ~ finiteT tr
finiteT tr \/ infiniteT tr
right; exact: not_finiteT_infiniteT.Qed.DefinitionfiniteT_infiniteT_dec (tr : trace) : { finiteT tr }+{ infiniteT tr } :=
match excluded_middle_informative (finiteT tr) with
| left Hfin => left Hfin
| right Hfin => right (not_finiteT_infiniteT Hfin)
end.
Using midpoints to show the right associativity of the append property
CoFixpointmidp (p0p1 : trace -> Prop) tr0tr1 (h : followsT (appendT p0 p1) tr0 tr1) : trace :=
match followsT_dec h with
| inl (existT tr (exist a (conj _ (conj _ H)))) =>
let: exist x _ := constructive_indefinite_description _ H in x
| inr (existT tr (existT tr' (existT a (exist b (conj _ (conj _ H)))))) =>
Tcons a b (@midp _ _ _ _ H)
end.
midpointT (followsT_nil eq_refl a0)
match
(let
'@exist _ _ x _ :=
constructive_indefinite_description
(funtr' : trace =>
p0 tr' /\ followsT p1 tr' tr1) a0 in x)
with
| Tnil a => Tnil a
| Tcons a b tr' => Tcons a b tr'
end
A, B: Type CIH: forall (p0p1 : trace -> Prop) (tr0tr1 : trace)
(h : followsT (p0 *+* p1) tr0 tr1), midpointT h (midp h) p0, p1: trace -> Prop a: A b: B tr, tr': trace h: followsT (p0 *+* p1) (Tcons a b tr)
(Tcons a b tr') f: followsT (p0 *+* p1) tr tr'
midpointT (followsT_delay a b f)
(midp (followsT_delay a b f))