#!/bin/sh
# -*- coding: utf-8 -*-
# Copyright (C) 2009, 2010, 2013 Laboratoire de Recherche et
# Développement de l'Epita (LRDE).
#
# This file is part of Spot, a model checking library.
#
# Spot is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# Spot is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
# License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
. ./defs || exit -1
set -e
# Check if the TGBA was corretly constructed.
check_construct()
{
run 0 ../ltl2tgba -F -le -b "$1" > output
}
# Check if the TGBA behaves correctly by doing an emptiness check on
# the product between the constructed TGBA and a given formula
# translated using FM.
check_true()
{
run 0 ../ltl2tgba -CR -e -Poutput -f "$1"
}
check_false()
{
run 1 ../ltl2tgba -CR -e -Poutput -f "$1"
}
for f in 'GFa' 'FGb' 'GFa->GFb'; do
run 0 ../ltl2tgba -lo -b "$f" > output
check_false "!($f)"
done
# Create the prelude file.
cat >input1 <<'EOF'
X=(
0 1 true
1 2 $0
accept 2
)
U=(
0 0 $0
0 1 $1
accept 1
)
G=(
0 0 $0
)
F=U(true, $0)
Strong=G(F($0))->G(F($1))
R=!U(!$0, !$1)
EOF
cat >input <input <input <input <input <input <input <input <G(F(b))'
check_false '!(G(F(a))->G(F(b)))'
cat >input <input <<'EOF'
T=(
0 1 true
1 0 $0
)
%
T(f)
EOF
check_construct input
cat >input <<'EOF'
include input1
Fusion=
(
0 1 $0 & !finish($0)
1 1 !finish($0)
1 2 $1 & finish($0)
0 2 $0 & $1 & finish($0)
accept 2
)
%
Fusion(F(a),b)
EOF
check_construct input
cat >input <<'EOF'
Concat=
(
0 1 $0 & !finish($0)
1 1 !finish($0)
1 2 finish($0)
0 2 $0 & finish($0)
2 3 $1
accept 3
)
%
Concat(a,b)
EOF
check_construct input
check_true 'a&X(b)'
check_false '!(a&X(b))'