Syntax (Section 2.1) #
Equations
- PDL.instReprProgram = { reprPrec := PDL.instReprProgram.repr_2 }
Equations
- PDL.instReprFormula = { reprPrec := PDL.instReprFormula.repr_1 }
Equations
- One or more equations did not get rendered due to their size.
- PDL.instDecidableEqFormula.decEq_1 PDL.Formula.bottom PDL.Formula.bottom = isTrue ⋯
- PDL.instDecidableEqFormula.decEq_1 PDL.Formula.bottom (PDL.Formula.atom_prop a) = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_1 PDL.Formula.bottom a.neg = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_1 PDL.Formula.bottom (a.and a_1) = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_1 PDL.Formula.bottom (PDL.Formula.box a a_1) = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_1 (PDL.Formula.atom_prop a) PDL.Formula.bottom = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_1 (PDL.Formula.atom_prop a) (PDL.Formula.atom_prop b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- PDL.instDecidableEqFormula.decEq_1 (PDL.Formula.atom_prop a) a_1.neg = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_1 (PDL.Formula.atom_prop a) (a_1.and a_2) = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_1 (PDL.Formula.atom_prop a) (PDL.Formula.box a_1 a_2) = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_1 a.neg PDL.Formula.bottom = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_1 a.neg (PDL.Formula.atom_prop a_1) = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_1 a.neg b.neg = if h : a = b then h ▸ have inst := PDL.instDecidableEqFormula.decEq_1 a a; isTrue ⋯ else isFalse ⋯
- PDL.instDecidableEqFormula.decEq_1 a.neg (a_1.and a_2) = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_1 a.neg (PDL.Formula.box a_1 a_2) = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_1 (a.and a_1) PDL.Formula.bottom = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_1 (a.and a_1) (PDL.Formula.atom_prop a_2) = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_1 (a.and a_1) a_2.neg = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_1 (a.and a_1) (PDL.Formula.box a_2 a_3) = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_1 (PDL.Formula.box a a_1) PDL.Formula.bottom = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_1 (PDL.Formula.box a a_1) (PDL.Formula.atom_prop a_2) = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_1 (PDL.Formula.box a a_1) a_2.neg = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_1 (PDL.Formula.box a a_1) (a_2.and a_3) = isFalse ⋯
Instances For
Equations
- One or more equations did not get rendered due to their size.
- PDL.instDecidableEqProgram.decEq_2 (PDL.Program.atom_prog a) (PDL.Program.atom_prog b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- PDL.instDecidableEqProgram.decEq_2 (PDL.Program.atom_prog a) (a_1.sequence a_2) = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_2 (PDL.Program.atom_prog a) (a_1.union a_2) = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_2 (PDL.Program.atom_prog a) a_1.star = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_2 (PDL.Program.atom_prog a) (PDL.Program.test a_1) = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_2 (a.sequence a_1) (PDL.Program.atom_prog a_2) = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_2 (a.sequence a_1) (a_2.union a_3) = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_2 (a.sequence a_1) a_2.star = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_2 (a.sequence a_1) (PDL.Program.test a_2) = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_2 (a.union a_1) (PDL.Program.atom_prog a_2) = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_2 (a.union a_1) (a_2.sequence a_3) = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_2 (a.union a_1) a_2.star = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_2 (a.union a_1) (PDL.Program.test a_2) = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_2 a.star (PDL.Program.atom_prog a_1) = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_2 a.star (a_1.sequence a_2) = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_2 a.star (a_1.union a_2) = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_2 a.star b.star = if h : a = b then h ▸ have inst := PDL.instDecidableEqProgram.decEq_2 a a; isTrue ⋯ else isFalse ⋯
- PDL.instDecidableEqProgram.decEq_2 a.star (PDL.Program.test a_1) = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_2 (PDL.Program.test a) (PDL.Program.atom_prog a_1) = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_2 (PDL.Program.test a) (a_1.sequence a_2) = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_2 (PDL.Program.test a) (a_1.union a_2) = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_2 (PDL.Program.test a) a_1.star = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_2 (PDL.Program.test a) (PDL.Program.test b) = if h : a = b then h ▸ have inst := PDL.instDecidableEqProgram.decEq_1 a a; isTrue ⋯ else isFalse ⋯
Instances For
Equations
- One or more equations did not get rendered due to their size.
- PDL.instDecidableEqFormula.decEq_2 (PDL.Program.atom_prog a) (PDL.Program.atom_prog b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- PDL.instDecidableEqFormula.decEq_2 (PDL.Program.atom_prog a) (a_1.sequence a_2) = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_2 (PDL.Program.atom_prog a) (a_1.union a_2) = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_2 (PDL.Program.atom_prog a) a_1.star = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_2 (PDL.Program.atom_prog a) (PDL.Program.test a_1) = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_2 (a.sequence a_1) (PDL.Program.atom_prog a_2) = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_2 (a.sequence a_1) (a_2.union a_3) = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_2 (a.sequence a_1) a_2.star = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_2 (a.sequence a_1) (PDL.Program.test a_2) = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_2 (a.union a_1) (PDL.Program.atom_prog a_2) = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_2 (a.union a_1) (a_2.sequence a_3) = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_2 (a.union a_1) a_2.star = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_2 (a.union a_1) (PDL.Program.test a_2) = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_2 a.star (PDL.Program.atom_prog a_1) = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_2 a.star (a_1.sequence a_2) = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_2 a.star (a_1.union a_2) = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_2 a.star b.star = if h : a = b then h ▸ have inst := PDL.instDecidableEqFormula.decEq_2 a a; isTrue ⋯ else isFalse ⋯
- PDL.instDecidableEqFormula.decEq_2 a.star (PDL.Program.test a_1) = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_2 (PDL.Program.test a) (PDL.Program.atom_prog a_1) = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_2 (PDL.Program.test a) (a_1.sequence a_2) = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_2 (PDL.Program.test a) (a_1.union a_2) = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_2 (PDL.Program.test a) a_1.star = isFalse ⋯
- PDL.instDecidableEqFormula.decEq_2 (PDL.Program.test a) (PDL.Program.test b) = if h : a = b then h ▸ have inst := PDL.instDecidableEqFormula.decEq_1 a a; isTrue ⋯ else isFalse ⋯
Instances For
Equations
- One or more equations did not get rendered due to their size.
- PDL.instDecidableEqProgram.decEq_1 PDL.Formula.bottom PDL.Formula.bottom = isTrue ⋯
- PDL.instDecidableEqProgram.decEq_1 PDL.Formula.bottom (PDL.Formula.atom_prop a) = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_1 PDL.Formula.bottom a.neg = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_1 PDL.Formula.bottom (a.and a_1) = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_1 PDL.Formula.bottom (PDL.Formula.box a a_1) = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_1 (PDL.Formula.atom_prop a) PDL.Formula.bottom = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_1 (PDL.Formula.atom_prop a) (PDL.Formula.atom_prop b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- PDL.instDecidableEqProgram.decEq_1 (PDL.Formula.atom_prop a) a_1.neg = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_1 (PDL.Formula.atom_prop a) (a_1.and a_2) = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_1 (PDL.Formula.atom_prop a) (PDL.Formula.box a_1 a_2) = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_1 a.neg PDL.Formula.bottom = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_1 a.neg (PDL.Formula.atom_prop a_1) = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_1 a.neg b.neg = if h : a = b then h ▸ have inst := PDL.instDecidableEqProgram.decEq_1 a a; isTrue ⋯ else isFalse ⋯
- PDL.instDecidableEqProgram.decEq_1 a.neg (a_1.and a_2) = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_1 a.neg (PDL.Formula.box a_1 a_2) = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_1 (a.and a_1) PDL.Formula.bottom = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_1 (a.and a_1) (PDL.Formula.atom_prop a_2) = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_1 (a.and a_1) a_2.neg = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_1 (a.and a_1) (PDL.Formula.box a_2 a_3) = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_1 (PDL.Formula.box a a_1) PDL.Formula.bottom = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_1 (PDL.Formula.box a a_1) (PDL.Formula.atom_prop a_2) = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_1 (PDL.Formula.box a a_1) a_2.neg = isFalse ⋯
- PDL.instDecidableEqProgram.decEq_1 (PDL.Formula.box a a_1) (a_2.and a_3) = isFalse ⋯
Instances For
Abbreviations and Notation #
□(αs,φ)
Equations
- PDL.Formula.boxes x✝¹ x✝ = List.foldr (fun (β : PDL.Program) (φ : PDL.Formula) => PDL.Formula.box β φ) x✝ x✝¹
Instances For
Sequential composition of a list of programs, with a true test as the empty sequence.
Equations
Instances For
An atomic proposition with the given natural-number index.
Equations
- PDL.«term·_» = Lean.ParserDescr.node `PDL.«term·_» 70 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol "·") (Lean.ParserDescr.cat `term 70))
Instances For
An atomic program with the given natural-number index.
Equations
- PDL.«term·__1» = Lean.ParserDescr.node `PDL.«term·__1» 70 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol "·") (Lean.ParserDescr.cat `term 70))
Instances For
Formula negation.
Equations
- PDL.«term~_» = Lean.ParserDescr.node `PDL.«term~_» 69 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol "~") (Lean.ParserDescr.cat `term 69))
Instances For
Equations
- PDL.Formula.instBot = { bot := PDL.Formula.bottom }
Equations
- PDL.Formula.insTop = { top := PDL.Formula.bottom.neg }
Formula conjunction.
Equations
- PDL.«term_⋀_» = Lean.ParserDescr.trailingNode `PDL.«term_⋀_» 66 67 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " ⋀ ") (Lean.ParserDescr.cat `term 66))
Instances For
Formula disjunction.
Equations
- PDL.«term_⋁_» = Lean.ParserDescr.trailingNode `PDL.«term_⋁_» 60 61 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " ⋁ ") (Lean.ParserDescr.cat `term 60))
Instances For
Material implication between formulas.
Equations
- PDL.«term_↣_» = Lean.ParserDescr.trailingNode `PDL.«term_↣_» 55 56 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " ↣ ") (Lean.ParserDescr.cat `term 55))
Instances For
Material equivalence between formulas.
Equations
- PDL.«term_⟷_» = Lean.ParserDescr.trailingNode `PDL.«term_⟷_» 55 56 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " ⟷ ") (Lean.ParserDescr.cat `term 55))
Instances For
The box modality of a program.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Iterated box modalities for a list of programs.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Sequential composition of programs.
Equations
- PDL.«term_;'_» = Lean.ParserDescr.trailingNode `PDL.«term_;'_» 33 33 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol ";'") (Lean.ParserDescr.cat `term 34))
Instances For
Nondeterministic choice between programs.
Equations
- PDL.«term_⋓_» = Lean.ParserDescr.trailingNode `PDL.«term_⋓_» 33 33 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol "⋓") (Lean.ParserDescr.cat `term 34))
Instances For
Kleene iteration of a program.
Equations
- PDL.«term∗_» = Lean.ParserDescr.node `PDL.«term∗_» 33 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol "∗") (Lean.ParserDescr.cat `term 33))
Instances For
The test program associated with a formula.
Equations
- PDL.term?'_ = Lean.ParserDescr.node `PDL.term?'_ 33 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol "?'") (Lean.ParserDescr.cat `term 33))
Instances For
Union of a list of programs. The empty union is ?'⊥, a program that cannot be
executed, so that [(⋃ ∅)*]φ is equivalent to φ.
Equations
- PDL.Program.unions [] = PDL.Program.test ⊥
- PDL.Program.unions [α] = α
- PDL.Program.unions (α :: rest) = α.union (PDL.Program.unions rest)
Instances For
A basic formula is of the form ¬⊥, p, ¬p, [a]_ or ¬[a]_.
Note: in the article also ⊥ is basic, but not here because we want
to apply OneSidedLocalRule.bot to it.
Equations
- PDL.Formula.bottom.basic = decide False
- PDL.Formula.bottom.neg.basic = decide True
- (PDL.Formula.atom_prop a).basic = decide True
- (PDL.Formula.atom_prop a).neg.basic = decide True
- (PDL.Formula.box (PDL.Program.atom_prog a) a_1).basic = decide True
- (PDL.Formula.box (PDL.Program.atom_prog a) a_1).neg.basic = decide True
- x✝.basic = decide False
Instances For
Equations
- PDL.instDecidablePredProgramIsAtomic (PDL.Program.atom_prog a) = decidable_of_decidable_of_iff ⋯
- PDL.instDecidablePredProgramIsAtomic (a.sequence a_1) = decidable_of_decidable_of_iff ⋯
- PDL.instDecidablePredProgramIsAtomic (a.union a_1) = decidable_of_decidable_of_iff ⋯
- PDL.instDecidablePredProgramIsAtomic a.star = decidable_of_decidable_of_iff ⋯
- PDL.instDecidablePredProgramIsAtomic (PDL.Program.test a) = decidable_of_decidable_of_iff ⋯
Equations
- One or more equations did not get rendered due to their size.
Tools for Box Formulas #
Separate a formula's leading boxes from its remaining formula.
Equations
- PDL.boxesOf (PDL.Formula.box prog nextf) = match PDL.boxesOf nextf with | (rest, endf) => (prog :: rest, endf)
- PDL.boxesOf x✝ = ([], x✝)
Instances For
Loaded Formulas #
Loaded formulas consist of a non-empty sequence of loading boxes, and a normal formula.
For loading boxes we write ⌊α⌋ instead of ⌈α⌉.
An ordinary formula or a formula with a distinguished loaded modal path.
- normal : Formula → AnyFormula
- loaded : LoadFormula → AnyFormula
Instances For
Equations
- PDL.instReprAnyFormula = { reprPrec := PDL.instReprAnyFormula.repr_1 }
Equations
- PDL.instReprLoadFormula = { reprPrec := PDL.instReprLoadFormula.repr_2 }
Equations
- One or more equations did not get rendered due to their size.
- PDL.instDecidableEqLoadFormula.decEq_1 (PDL.AnyFormula.normal a) (PDL.AnyFormula.normal b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- PDL.instDecidableEqLoadFormula.decEq_1 (PDL.AnyFormula.normal a) (PDL.AnyFormula.loaded a_1) = isFalse ⋯
- PDL.instDecidableEqLoadFormula.decEq_1 (PDL.AnyFormula.loaded a) (PDL.AnyFormula.normal a_1) = isFalse ⋯
Instances For
Equations
- One or more equations did not get rendered due to their size.
- PDL.instDecidableEqAnyFormula.decEq_1 (PDL.AnyFormula.normal a) (PDL.AnyFormula.normal b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- PDL.instDecidableEqAnyFormula.decEq_1 (PDL.AnyFormula.normal a) (PDL.AnyFormula.loaded a_1) = isFalse ⋯
- PDL.instDecidableEqAnyFormula.decEq_1 (PDL.AnyFormula.loaded a) (PDL.AnyFormula.normal a_1) = isFalse ⋯
Instances For
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
A box whose continuation may itself carry a loaded path.
- box : Program → AnyFormula → LoadFormula
Instances For
Equations
Equations
Load a nonempty modal sequence given its prefix and final program.
Equations
- PDL.loadMulti x✝² x✝¹ x✝ = List.foldr (fun (β : PDL.Program) (lf : PDL.LoadFormula) => PDL.LoadFormula.box β (PDL.AnyFormula.loaded lf)) (PDL.LoadFormula.box x✝¹ (PDL.AnyFormula.normal x✝)) x✝²
Instances For
Prepend a list of loaded boxes to a loaded continuation.
Equations
- PDL.LoadFormula.boxes x✝¹ x✝ = List.foldr (fun (β : PDL.Program) (lf : PDL.LoadFormula) => PDL.LoadFormula.box β (PDL.AnyFormula.loaded lf)) x✝ x✝¹
Instances For
Erase loading annotations to obtain an ordinary formula.
Equations
- (PDL.LoadFormula.box α (PDL.AnyFormula.normal φ)).unload = PDL.Formula.box α φ
- (PDL.LoadFormula.box α (PDL.AnyFormula.loaded χ)).unload = PDL.Formula.box α χ.unload
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- PDL.instReprNegLoadFormula = { reprPrec := PDL.instReprNegLoadFormula.repr }
Equations
- PDL.instDecidableEqNegLoadFormula.decEq (PDL.NegLoadFormula.neg a) (PDL.NegLoadFormula.neg b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
Instances For
A loaded box modality.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Iterated loaded boxes for a list of programs.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Negation of a loaded formula.
Equations
- PDL.«term~'_» = Lean.ParserDescr.node `PDL.«term~'_» 1022 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol "~'") (Lean.ParserDescr.cat `term 0))
Instances For
Negation of an ordinary or loaded formula.
Equations
- PDL.«term~''_» = Lean.ParserDescr.node `PDL.«term~''_» 1022 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol "~''") (Lean.ParserDescr.cat `term 1023))
Instances For
Erase loading annotations from a negated loaded formula.
Equations
Instances For
Load a possibly already loaded formula χ with a sequence δ of boxes. The result is loaded iff δ≠[] or χ was loaded.
Equations
- PDL.AnyFormula.loadBoxes x✝¹ x✝ = List.foldr (fun (β : PDL.Program) (lf : PDL.AnyFormula) => PDL.AnyFormula.loaded (PDL.LoadFormula.box β lf)) x✝ x✝¹
Instances For
Erase loading annotations, leaving ordinary formulas unchanged.
Equations
- (PDL.AnyFormula.normal φ).unload = φ
- (PDL.AnyFormula.loaded χ).unload = χ.unload
Instances For
Spliting of loaded formulas #
Split any formula into the list of loaded boxes and the free formula.
Instances For
Split a loaded formula into the list of loaded boxes and the free formula.
Equations
- (PDL.LoadFormula.box α af).split = (fun (x : List PDL.Program × PDL.Formula) => match x with | (δ, f) => (α :: δ, f)) af.split
Instances For
Construct a loaded modal sequence from a list known to be nonempty.
Equations
- PDL.loadMultiNonEmpty [] h x✝ = ⋯.elim
- PDL.loadMultiNonEmpty [α] x_3 x✝ = PDL.LoadFormula.box α (PDL.AnyFormula.normal x✝)
- PDL.loadMultiNonEmpty (α :: d :: δ) x_3 x✝ = PDL.LoadFormula.box α (PDL.AnyFormula.loaded (PDL.loadMultiNonEmpty (d :: δ) ⋯ x✝))
Instances For
splitLast #
Measures #
The syntactic length of a program, mutually defined with formula length.
Equations
- PDL.lengthOfProgram (PDL.Program.atom_prog a) = 1
- PDL.lengthOfProgram (a.sequence a_1) = 1 + PDL.lengthOfProgram a + PDL.lengthOfProgram a_1
- PDL.lengthOfProgram (a.union a_1) = 1 + PDL.lengthOfProgram a + PDL.lengthOfProgram a_1
- PDL.lengthOfProgram a.star = 1 + PDL.lengthOfProgram a
- PDL.lengthOfProgram (PDL.Program.test a) = 2 + PDL.lengthOfFormula a
Instances For
The syntactic length of a formula, mutually defined with program length.
Equations
- PDL.lengthOfFormula PDL.Formula.bottom = 1
- PDL.lengthOfFormula (PDL.Formula.atom_prop a) = 1
- PDL.lengthOfFormula φ.neg = 1 + PDL.lengthOfFormula φ
- PDL.lengthOfFormula (φ.and ψ) = 1 + PDL.lengthOfFormula φ + PDL.lengthOfFormula ψ
- PDL.lengthOfFormula (PDL.Formula.box α φ) = 1 + PDL.lengthOfProgram α + PDL.lengthOfFormula φ
Instances For
Types equipped with a natural-valued syntactic length.
- lengthOf : α → ℕ
The syntactic length of an object.
Instances
Equations
- PDL.formulaHasLength = { lengthOf := PDL.lengthOfFormula }
Equations
- PDL.setFormulaHasLength = { lengthOf := fun (X : Finset PDL.Formula) => X.sum PDL.lengthOfFormula }
Equations
- PDL.listFormulaHasLength = { lengthOf := fun (X : List PDL.Formula) => (List.map PDL.lengthOfFormula X).sum }
Equations
- PDL.programHasLength = { lengthOf := PDL.lengthOfProgram }
Equations
- PDL.setProgramHasLength = { lengthOf := fun (X : Finset PDL.Program) => X.sum PDL.lengthOfProgram }
Sorting formulas #
Needed to convert a Finset Formula to List Formula.
TODO: make this a separate file
Order: ⊥ < p < ¬φ < φ1∧φ2 < [α]φ
Note that we want this to be antisymmetric later, so we cannot just use < on some measure.
An alternative approach here would be to even go for Denumerable.
Equations
- PDL.Formula.bottom.le PDL.Formula.bottom = True
- PDL.Formula.bottom.le x✝ = True
- (PDL.Formula.atom_prop a).le PDL.Formula.bottom = False
- (PDL.Formula.atom_prop p).le (PDL.Formula.atom_prop p') = (p ≤ p')
- (PDL.Formula.atom_prop a).le x✝ = True
- a.neg.le PDL.Formula.bottom = False
- a.neg.le (PDL.Formula.atom_prop a_1) = False
- φ.neg.le φ'.neg = φ.le φ'
- a.neg.le x✝ = True
- (a.and a_1).le PDL.Formula.bottom = False
- (a.and a_1).le (PDL.Formula.atom_prop a_2) = False
- (a.and a_1).le a_2.neg = False
- (φ1.and φ2).le (φ1'.and φ2') = (φ1.le φ1' ∧ (φ1 = φ1' → φ2.le φ2'))
- (a.and a_1).le (PDL.Formula.box a_2 a_3) = True
- (PDL.Formula.box a a_1).le PDL.Formula.bottom = False
- (PDL.Formula.box a a_1).le (PDL.Formula.atom_prop a_2) = False
- (PDL.Formula.box a a_1).le a_2.neg = False
- (PDL.Formula.box a a_1).le (a_2.and a_3) = False
- (PDL.Formula.box α φ).le (PDL.Formula.box α' φ') = (α.le α' ∧ (α = α' → φ.le φ'))
Instances For
The recursive ordering of program syntax used for finite enumerations.
Equations
- (PDL.Program.atom_prog a).le (PDL.Program.atom_prog a') = (a ≤ a')
- (PDL.Program.atom_prog a).le x✝ = True
- (a.sequence a_1).le (PDL.Program.atom_prog a_2) = False
- (α.sequence β).le (α'.sequence β') = (α.le α' ∧ (α = α' → β.le β'))
- (a.sequence a_1).le x✝ = True
- (a.union a_1).le (PDL.Program.atom_prog a_2) = False
- (a.union a_1).le (a_2.sequence a_3) = False
- (α.union β).le (α'.union β') = (α.le α' ∧ (α = α' → β.le β'))
- (a.union a_1).le a_2.star = True
- (a.union a_1).le (PDL.Program.test a_2) = True
- a.star.le (PDL.Program.atom_prog a_1) = False
- a.star.le (a_1.sequence a_2) = False
- a.star.le (a_1.union a_2) = False
- α.star.le α'.star = α.le α'
- a.star.le (PDL.Program.test a_1) = True
- (PDL.Program.test a).le (PDL.Program.atom_prog a_1) = False
- (PDL.Program.test a).le (a_1.sequence a_2) = False
- (PDL.Program.test a).le (a_1.union a_2) = False
- (PDL.Program.test a).le a_1.star = False
- (PDL.Program.test τ).le (PDL.Program.test τ') = τ.le τ'
Instances For
Equations
- PDL.instLEFormula = { le := PDL.Formula.le }
Equations
- PDL.instLTFormula = { lt := fun (φ1 φ2 : PDL.Formula) => φ1 ≠ φ2 ∧ φ1.le φ2 }
Equations
- PDL.instLEProgram = { le := PDL.Program.le }
Equations
- PDL.instLTProgram = { lt := fun (α α' : PDL.Program) => α ≠ α' ∧ α.le α' }
Deciding the order #
The order on formulas is decidable.
Equations
- PDL.Formula.bottom.decLe PDL.Formula.bottom = isTrue trivial
- PDL.Formula.bottom.decLe (PDL.Formula.atom_prop a) = isTrue trivial
- PDL.Formula.bottom.decLe a.neg = isTrue trivial
- PDL.Formula.bottom.decLe (a.and a_1) = isTrue trivial
- PDL.Formula.bottom.decLe (PDL.Formula.box a a_1) = isTrue trivial
- (PDL.Formula.atom_prop a).decLe PDL.Formula.bottom = isFalse not_false
- (PDL.Formula.atom_prop a).decLe (PDL.Formula.atom_prop b) = a.decLe b
- (PDL.Formula.atom_prop a).decLe a_1.neg = isTrue trivial
- (PDL.Formula.atom_prop a).decLe (a_1.and a_2) = isTrue trivial
- (PDL.Formula.atom_prop a).decLe (PDL.Formula.box a_1 a_2) = isTrue trivial
- a.neg.decLe PDL.Formula.bottom = isFalse not_false
- a.neg.decLe (PDL.Formula.atom_prop a_1) = isFalse not_false
- a.neg.decLe b.neg = a.decLe b
- a.neg.decLe (a_1.and a_2) = isTrue trivial
- a.neg.decLe (PDL.Formula.box a_1 a_2) = isTrue trivial
- (a.and a_1).decLe PDL.Formula.bottom = isFalse not_false
- (a.and a_1).decLe (PDL.Formula.atom_prop a_2) = isFalse not_false
- (a.and a_1).decLe a_2.neg = isFalse not_false
- (a.and a_1).decLe (b.and b_1) = instDecidableAnd
- (a.and a_1).decLe (PDL.Formula.box a_2 a_3) = isTrue trivial
- (PDL.Formula.box a a_1).decLe PDL.Formula.bottom = isFalse not_false
- (PDL.Formula.box a a_1).decLe (PDL.Formula.atom_prop a_2) = isFalse not_false
- (PDL.Formula.box a a_1).decLe a_2.neg = isFalse not_false
- (PDL.Formula.box a a_1).decLe (a_2.and a_3) = isFalse not_false
- (PDL.Formula.box a a_1).decLe (PDL.Formula.box b b_1) = instDecidableAnd
Instances For
The order on programs is decidable.
Equations
- (PDL.Program.atom_prog a).decLe (PDL.Program.atom_prog b) = a.decLe b
- (PDL.Program.atom_prog a).decLe (a_1.sequence a_2) = isTrue trivial
- (PDL.Program.atom_prog a).decLe (a_1.union a_2) = isTrue trivial
- (PDL.Program.atom_prog a).decLe a_1.star = isTrue trivial
- (PDL.Program.atom_prog a).decLe (PDL.Program.test a_1) = isTrue trivial
- (a.sequence a_1).decLe (PDL.Program.atom_prog a_2) = isFalse not_false
- (a.sequence a_1).decLe (b.sequence b_1) = instDecidableAnd
- (a.sequence a_1).decLe (a_2.union a_3) = isTrue trivial
- (a.sequence a_1).decLe a_2.star = isTrue trivial
- (a.sequence a_1).decLe (PDL.Program.test a_2) = isTrue trivial
- (a.union a_1).decLe (PDL.Program.atom_prog a_2) = isFalse not_false
- (a.union a_1).decLe (a_2.sequence a_3) = isFalse not_false
- (a.union a_1).decLe (b.union b_1) = instDecidableAnd
- (a.union a_1).decLe a_2.star = isTrue trivial
- (a.union a_1).decLe (PDL.Program.test a_2) = isTrue trivial
- a.star.decLe (PDL.Program.atom_prog a_1) = isFalse not_false
- a.star.decLe (a_1.sequence a_2) = isFalse not_false
- a.star.decLe (a_1.union a_2) = isFalse not_false
- a.star.decLe b.star = a.decLe b
- a.star.decLe (PDL.Program.test a_1) = isTrue trivial
- (PDL.Program.test a).decLe (PDL.Program.atom_prog a_1) = isFalse not_false
- (PDL.Program.test a).decLe (a_1.sequence a_2) = isFalse not_false
- (PDL.Program.test a).decLe (a_1.union a_2) = isFalse not_false
- (PDL.Program.test a).decLe a_1.star = isFalse not_false
- (PDL.Program.test a).decLe (PDL.Program.test b) = a.decLe b
Instances For
The order is a linear order #
List the elements of a formula finset in the fixed formula order.
Equations
- x✝.pdlSort = x✝.sort fun (a b : PDL.Formula) => a ≤ b