The two models:
M | K |
---|---|
Graphviz code
|
Graphviz code
|
Round | S | D | link | local harmony |
---|---|---|---|---|
0 | a ~ 1 | ok | ||
1 | a -> c | (1/2) 1 -> 2 | c ~ 2 | ok |
2 | c -> d | 2 -> 3 | d ~ 3 | ok |
3 | 3 -> 1 | stuck. | ||
… | … | … | … | … |
1 | a -> c | (2/2) 1 -> 4 | c ~ 4 | ok |
2 | c -> a | stuck. |
So even in an optimal game, D gets stuck. Therefore, M,a and K,1 are not bisimilar.
Once we find a winning strategy for S no matter what D does, we can stop.
A formula distinguishing M,a and K,1 is: ◇ ◇ □ ⊥
In two steps, we reach a blind state.
Show validity of: □ p → ◇ p
Pre-processing:
□ p → ◇ p ≡ ¬ □ p ∨ ◇ p
≡ ◇ ¬ p ∨ ◇ p
Sequent | Tableau |
---|---|
Stuck. No diamond on left, so cannot take a step. ◇ ¬ p ∨ ◇ p not valid, so □ p → ◇ p not valid. |
Zero non-solid successors. Stuck, does not close, so non-validity. Counter-model F = ({1}, ∅), V(p) = ∅. Graphviz code
|
Show validity of: □ (p → q) → (□ p → □ q)
Pre-processing:
□ (p → q) → (□ p → □ q) ≡ ¬ ◇ ¬ (¬ p ∨ q) → (¬ ◇ ¬ p → ¬ ◇ ¬ q)
≡ ◇ ¬ (¬ p ∨ q) ∨ (◇ ¬ p ∨ ¬ ◇ ¬ q)
≡ ◇ (p ∧ ¬ q) ∨ ◇ ¬ p ∨ ¬ ◇ ¬ q
Sequent | Tableau |
---|---|
|
Closes, so initial formula is valid. Graphviz code
|
Show validity of: (□ p → □ q) → □ (p → q)
Pre-processing:
(□ p → □ q) → □ (p → q) ≡ (¬ ◇ ¬ p → ¬ ◇ ¬ q) → ¬ ◇ ¬ (¬ p ∨ q)
≡ ¬ (◇ ¬ p ∨ ¬ ◇ ¬ q) ∨ ¬ ◇ (p ∧ ¬ q)
≡ (¬ ◇ ¬ p ∧ ◇ ¬ q) ∨ ¬ ◇ (p ∧ ¬ q)
Tableau:
graph g {
a [label="* (¬ ◇ ¬ p ∧ ◇ ¬ q), ¬ ◇ (p ∧ ¬ q)", xlabel="1"]
b [label="◇ (p ∧ ¬ q) * ¬ ◇ ¬ p ∧ ◇ ¬ q", xlabel="1"]; a -- b
la [label="◇ (p ∧ ¬ q) * ¬ ◇ ¬ p", xlabel="1"]; a -- la
lb [label="◇ (p ∧ ¬ q), ◇ ¬ p *", xlabel="1"]; la -- lb
lla [label="p ∧ ¬ q *", xlabel="2"]; lb -- lla [style="dashed"]
llb [label="p, ¬ q *", xlabel="2"]; lla -- llb
llc [label="{p * q | does not close}", xlabel="2", shape="record"]; llb -- llc
lra [label="{¬ p * | does not close}", xlabel="3", shape="record"]; lb -- lra [style="dashed"]
ra [label="◇ (p ∧ ¬ q) * ◇ ¬ q", xlabel="1"]; b -- ra
rb [label="p ∧ ¬ q * ¬ q", xlabel="4"]; ra -- rb [style="dashed"]
rc [label="p ∧ ¬ q, q *", xlabel="4"]; rb -- rc
rd [label="p, ¬ q, q *", xlabel="4"]; rc -- rd
re [label="{p, q * q | closes}", xlabel="4", shape="record"]; rd -- re
}
This yields a counter-model:
digraph g {
rankdir=LR
1 -> 2; 2 [shape="Mrecord", label="{2 | p}"]
1 -> 3
}
1 ⊭ □ (p → q) because 2 ⊭ p → q. But 1 ⊨ (□ p → □ q) because 1 ⊭ □ p.