MatchingLogic.Core #
Patterns of basic matching logic: no definedness, no set variables, no
fixpoints (paper, Section 2). Primitives are implication and ⊥.
- var {S : Signature} {Var : Type} : Var → Pattern S Var
- app {S : Signature} {Var : Type} (σ : S.Sym) : (Fin (S.arity σ) → Pattern S Var) → Pattern S Var
- imp {S : Signature} {Var : Type} : Pattern S Var → Pattern S Var → Pattern S Var
- bot {S : Signature} {Var : Type} : Pattern S Var
- ex {S : Signature} {Var : Type} : Var → Pattern S Var → Pattern S Var
Instances For
⊤ := ⊥ → ⊥
Instances For
∀x.φ := ¬∃x.¬φ
Equations
- MatchingLogic.Pattern.al x φ = (MatchingLogic.Pattern.ex x φ.nt).nt
Instances For
A model: a nonempty carrier together with, for each symbol of arity n, a
map Mⁿ → 𝒫(M) (paper, Section 2).
- carrier : Type
The type of points in the model.
The set-valued interpretation of each operation symbol.
Instances For
The denotation ρ(φ) ⊆ M (paper, Section 2).
Equations
- M.denote x✝ (MatchingLogic.Pattern.var x_2) = {x✝ x_2}
- M.denote x✝ MatchingLogic.Pattern.bot = ∅
- M.denote x✝ (MatchingLogic.Pattern.app σ f) = M.app σ fun (i : Fin (S.arity σ)) => M.denote x✝ (f i)
- M.denote x✝ (φ.imp ψ) = (M.denote x✝ φ)ᶜ ∪ M.denote x✝ ψ
- M.denote x✝ (MatchingLogic.Pattern.ex x_2 φ) = ⋃ (a : M.carrier), M.denote (Function.update x✝ x_2 a) φ
Instances For
Derived clauses (paper, Section 2): these are the positive controls on the
definitions above -- if any of them failed, denote would be wrong.
One backward step: u ⇝ v when u ∈ σ_M(a₁,…,aₙ) for some tuple a with
v = a i (paper, Definition 2). Constants contribute no steps, since
Fin 0 is empty.
Equations
Instances For
The concrete form used in the proofs: if a point of C is produced by a
tuple, every component of that tuple lies in C (paper, Definition 2, second
sentence).