Skip to main content

A symbolic model checker for the single-agent plausibility models of dynamic epistemic logic

Project description

smcplaus

Project repository: https://gitlab.com/dqalombardi/smcplaus

Project owner: David Alvarez Lombardi

Description

A symbolic model checker for the single-agent plausibility models of dynamic epistemic logic.

References

Usage

Specifying formulas

Specify propositional variables.

p = PropositionalVariable(letter="p")
q0 = PropositionalVariable(letter="q", index=0)
q1 = PropositionalVariable(letter="q", index=1)

Specify complex formulas.

form_p = Formula(node=p, subformulas=None)
form_q0 = Formula(node=q0, subformulas=None)
form0 = Formula(node=Connectives.DIAMOND, subformulas=(form_q0,))  # <>q0
form1 = Formula(node=Connectives.RADICAL_UPGRADE, subformulas=(form_q0, form0))  # [$q0]<>q0

Specifying models

Specify plausibility frames by specifying a domain and a state-to-appearance map.

state0 = State(index=0)
state1 = State(index=1)
state2 = State(index=2)

my_frame = PlausibilityFrame(
    domain={state0, state1, state2},
    state_to_appearance={
        state0: {state1},
        state1: {state2},
        state2: {state2},
    },
    force_s4=True,
)

Specify plausibility models by specifying a frame and a state-to-facts map.

my_model = PlausibilityModel(
    frame=my_frame,
    state_to_facts={
        state0: {p, q0},
        state1: {q1},
        state2: {p, q1},
    },
)

Specify pointed plausibility models by specifying a model and a point.

my_pointed_model = PointedPlausibilityModel(
    model=my_model,
    point=state1,
)

Checking (pointed) models against formulas

Check if a pointed model satisfies a formula.

my_pointed_model_satisfies_form0 = my_pointed_model.satisfies(form0)  # False
my_pointed_model_satisfies_form1 = my_pointed_model.satisfies(form1)  # True

Check where a model satisfies a formula.

form_p_truthset = my_model.truthset(form_p)  # {State(s2), State(s0)}

Modifying models with formulas

Upgrade a model with a formula.

my_new_model = my_model.radical_upgrade(form_q0)

Loading and dumping models with JSON files

Specify and load a structure from a JSON file.

my_other_model_json_str = """
{
    "frame": {
        "domain": ["s0", "s1", "s2"],
        "state_to_appearance": {
            "s0": ["s1"],
            "s1": ["s2"],
            "s2": ["s2"]
        }
    },
    "state_to_facts": {
        "s0": ["p", "q0"],
        "s1": ["q1"],
        "s2": ["p", "q1"]
    }
}
"""

my_other_model = PlausibilityModel.from_json(my_other_model_json_str, force_s4=True)

Dump a structure to a JSON file.

output_json = my_other_model.to_json()

See ./examples/ for further example usage.

Contributing

Before submitting a merge request, run the command tox, which will run formatters, linters, static type-checkers, and unit tests respectively.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

smcplaus-1.0.0.tar.gz (11.2 kB view hashes)

Uploaded Source

Built Distribution

smcplaus-1.0.0-py3-none-any.whl (14.2 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page