# dfa-identify
Python library for identifying (learning) minimal DFAs from labeled examples
by reduction to SAT.
[![Build Status](https://cloud.drone.io/api/badges/mvcisback/dfa-identify/status.svg)](https://cloud.drone.io/mvcisback/dfa-identify)
[![PyPI version](https://badge.fury.io/py/dfa-identify.svg)](https://badge.fury.io/py/dfa-identify)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
**Table of Contents**
- [Installation](#installation)
- [Usage](#usage)
- [Encoding](#encoding)
- [Goals and related libraries](#goals-and-related-libraries)
# Installation
If you just need to use `dfa`, you can just run:
`$ pip install dfa`
For developers, note that this project uses the
[poetry](https://poetry.eustace.io/) python package/dependency
management tool. Please familarize yourself with it and then
run:
`$ poetry install`
# Usage
`dfa_identify` is centered around the `find_dfa` and `find_dfas` function. Both take in
sequences of accepting and rejecting "words", where are word is a
sequence of arbitrary python objects.
1. `find_dfas` returns all minimally sized (no `DFA`s exist of size
smaller) consistent with the given labeled data.
2. `find_dfa` returns an arbitrary (first) minimally sized `DFA`.
The returned `DFA` object is from the [dfa](https://github.com/mvcisback/dfa) library.
```python
from dfa_identify import find_dfa
accepting = ['a', 'abaa', 'bb']
rejecting = ['abb', 'b']
my_dfa = find_dfa(accepting=accepting, rejecting=rejecting)
assert all(my_dfa.label(x) for x in accepting)
assert all(not my_dfa.label(x) for x in rejecting)
```
Because words are sequences of arbitrary python objects, the
identification problem, with `a` ↦ 0 and `b` ↦ 1, is given below:
```python
accepting = [[0], [0, 'z', 0, 0], ['z', 'z']]
rejecting = [[0, 'z', 'z'], ['z']]
my_dfa = find_dfa(accepting=accepting, rejecting=rejecting)
```
# Minimality
There are two forms of "minimality" supported by `dfa-identify`.
1. By default, dfa-identify returns DFAs that have the minimum
number of states required to seperate the accepting and
rejecting set.
2. If the `order_by_stutter` flag is set to `True`, then the
`find_dfas` (lazily) orders the DFAs so that the number of
self loops (stuttering transitions) appearing the DFAs decreases.
`find_dfa` thus returns a DFA with the most number of self loops
given the minimal number of states.
# Encoding
This library currently uses the encodings outlined in [Heule, Marijn JH, and Sicco Verwer. "Exact DFA identification using SAT solvers." International Colloquium on Grammatical Inference. Springer, Berlin, Heidelberg, 2010.](https://link.springer.com/chapter/10.1007/978-3-642-15488-1_7) and [Ulyantsev, Vladimir, Ilya Zakirzyanov, and Anatoly Shalyto. "Symmetry Breaking Predicates for SAT-based DFA Identification."](https://arxiv.org/abs/1602.05028).
The key difference is in the use of the symmetry breaking clauses. Two kinds are exposed.
1. clique (Heule 2010): Partially breaks symmetries by analyzing
conflict graph.
2. bfs (Ulyantsev 2016): Breaks all symmetries so that each model corresponds to a unique DFA.
# Goals and related libraries
There are many other python libraries that
perform DFA and other automata inference.
1. [DFA-Inductor-py](https://github.com/ctlab/DFA-Inductor-py) - State of the art passive inference via reduction to SAT (as of 2019).
2. [z3gi](https://gitlab.science.ru.nl/rick/z3gi): Uses SMT backed passive learning algorithm.
3. [lstar](https://pypi.org/project/lstar/): Active learning algorithm based L* derivative.
The primary goal of this library is to loosely track the state of the art in passive SAT based inference while providing a simple implementation and API.
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
资源分类:Python库 所属语言:Python 资源全名:dfa_identify-3.6.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
资源推荐
资源详情
资源评论
收起资源包目录
dfa_identify-3.6.0.tar.gz (9个子文件)
dfa_identify-3.6.0
PKG-INFO 4KB
pyproject.toml 641B
LICENSE 1KB
dfa_identify
graphs.py 4KB
encoding.py 12KB
__init__.py 74B
identify.py 8KB
setup.py 5KB
README.md 4KB
共 9 条
- 1
资源评论
挣扎的蓝藻
- 粉丝: 14w+
- 资源: 15万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- java项目工时统计成本核算管理系统源码数据库 MySQL源码类型 WebForm
- Python-基于Pygame的贪吃蛇
- C#ASP.NET高校移动考勤webapp源码数据库 SQL2008源码类型 WebForm
- (2000-2023年)中国各、省、市、县、乡镇基尼系数数据(全新整理)
- JAVA的SpringBoot快速开发平台源码数据库 MySQL源码类型 WebForm
- java校园跑腿综合服务网平台小程序源码带部署搭建教程数据库 MySQL源码类型 WebForm
- 时间序列-白银-1分数据
- C#VS2015进销存管理系统源码数据库 SQL2008源码类型 WebForm
- java企业报表管理系统源码数据库 MySQL源码类型 WebForm
- 软考题库试题及其解析.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功