You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/starting.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,7 +9,7 @@ nav_order: 2
9
9
Thank you for your interest in Formulog!
10
10
This page describes how to set up Formulog and provides some pointers on writing Formulog programs.
11
11
12
-
## Seting up Formulog
12
+
## Setting up Formulog
13
13
14
14
There are three main ways to set up Formulog (listed in increasing order of number of dependencies):
15
15
@@ -100,15 +100,15 @@ greeting("Hello, World")
100
100
101
101
Now that you have Formulog set up, the fun part starts: writing Formulog programs!
102
102
103
-
Check out our [tutorial]({{ site.baseurl }}{% link tutorial/index.md %}) for a walk-through of how to encode a refinement type system in Formulog.
103
+
Check out our [tutorial]({{ site.base_url }}{% link tutorial/index.md %}) for a walk-through of how to encode a refinement type system in Formulog.
104
104
Additional short-ish example programs can be found in the `examples/` directory (in the Docker image or repository base directory).
105
105
For examples of larger developments, see the case studies we have used in publications:
106
106
107
107
-[a refinement type checker](https://github.com/aaronbembenek/making-formulog-fast/blob/main/benchmarks/dminor/bench.flg)
108
108
-[a bottom-up points-to analysis for Java](https://github.com/aaronbembenek/making-formulog-fast/blob/main/benchmarks/scuba/bench.flg)
109
109
-[a symbolic executor an LLVM fragment](https://github.com/aaronbembenek/making-formulog-fast/blob/main/benchmarks/symex/bench.flg)
110
110
111
-
See the [language reference]({{ site.baseurl }}{% link lang_ref/index.md %}) for details about Formulog constructs.
111
+
See the [language reference]({{ site.base_url }}{% link lang_ref/index.md %}) for details about Formulog constructs.
112
112
113
113
Syntax highlighting is available for Visual Studio Code (follow instructions [here](https://github.com/HarvardPL/formulog-syntax)) and Vim (install [misc/flg.vim](https://github.com/HarvardPL/formulog/blob/master/misc/flg.vim)).
Copy file name to clipboardExpand all lines: docs/tutorial/index.md
+8-8Lines changed: 8 additions & 8 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,7 +7,7 @@ nav_order: 3
7
7
# Tutorial: Building a Refinement Type Checker
8
8
9
9
In this tutorial, we'll implement a type checker for a small (but still interesting) refinement type system in Formulog.
10
-
In particular, we'll implement the declarative, bidirectional type checking rules for the first system in the article [Refinement Types: A Tutorial](https://arxiv.org/abs/2010.07763) by Ranjit Jhala and Niki Vazou [1].
10
+
In particular, we'll implement the declarative, bidirectional type checking rules for the first system in the article [Refinement Types: A Tutorial](https://arxiv.org/abs/2010.07763v1) by Ranjit Jhala and Niki Vazou [1].
11
11
Our hope is that our tutorial gives a good overview of many Formulog features, and a flavor of what it is like to program a nontrivial analysis in Formulog.
12
12
13
13
### Intended Audience
@@ -24,7 +24,7 @@ If you have a question about the content of this tutorial, a suggestion for impr
24
24
25
25
### Attribution
26
26
27
-
This tutorial includes figures from the article [Refinement Types: A Tutorial](https://arxiv.org/abs/2010.07763) (v1) by Ranjit Jhala and Niki Vazou [1], which has been published under a [CC BY 4.0 license](https://creativecommons.org/licenses/by/4.0/).
27
+
This tutorial includes figures from the article [Refinement Types: A Tutorial](https://arxiv.org/abs/2010.07763v1) by Ranjit Jhala and Niki Vazou [1], which has been published under a [CC BY 4.0 license](https://creativecommons.org/licenses/by/4.0/).
28
28
We will refer to this article as "JV" for short.
29
29
30
30
## General Approach
@@ -35,7 +35,7 @@ Our typical approach when implementing an analysis in Formulog is thus to try to
35
35
36
36
This is the approach we will follow in this tutorial: directly translate the formalism of JV as we encounter it, and then go back to patch our implementation as necessary.
37
37
Concretely, we will work our way through JV Sections 3.1 and 3.2.
38
-
For the full, final code, see [tutorial.flg](tutorial.flg).
38
+
For the full, final code, see [tutorial.flg](https://github.com/HarvardPL/formulog/blob/master/docs/tutorial/tutorial.flg).
39
39
40
40
## Definitions
41
41
@@ -600,7 +600,7 @@ ent((X, t_refined(B, Y, P)) :: G, C) :-
600
600
```
601
601
602
602
Now the type checker works on this example!
603
-
(This isn't the most general solution: a better technique would be to create a fresh variable and substitute it with`Y` in `P` and `X` in `C`; however, this is good enough for now.)
603
+
(This isn't the most general solution: a better technique would be to create a fresh variable and substitute it for`Y` in `P` and `X` in `C`; however, this is good enough for now.)
604
604
605
605
### Checking Functions
606
606
@@ -772,10 +772,10 @@ As we mentioned earlier, please raise a [GitHub issue](https://github.com/Harvar
772
772
773
773
## References
774
774
775
-
[1] Ranjit Jhala and Niki Vazou. 2020. Refinement Types: A Tutorial. arXiv:2010.07763. https://arxiv.org/abs/2010.07763
775
+
[1] Ranjit Jhala and Niki Vazou. 2020. Refinement Types: A Tutorial. arXiv:2010.07763v1. <https://arxiv.org/abs/2010.07763v1>
776
776
777
-
[2] Gavin M. Bierman, Andrew D. Gordon, Cătălin Hriţcu, and David Langworthy. 2012. Semantic Subtyping with an SMT Solver. Journal of Functional Programming 22, 1 (2012), 31–105. https://doi.org/10.1145/1863543.1863560
777
+
[2] Gavin M. Bierman, Andrew D. Gordon, Cătălin Hriţcu, and David Langworthy. 2012. Semantic Subtyping with an SMT Solver. Journal of Functional Programming 22, 1 (2012), 31–105. <https://doi.org/10.1017/S0956796812000032>
778
778
779
-
[3] Yu Feng, Xinyu Wang, Isil Dillig, and Thomas Dillig. 2015. Bottom-up Context-Sensitive Pointer Analysis for Java. In Proceedings of the 13th Asian Symposium on Programming Languages and Systems. 465–484. https://doi.org/10.1007/978-3-319-26529-2_25
779
+
[3] Yu Feng, Xinyu Wang, Isil Dillig, and Thomas Dillig. 2015. Bottom-up Context-Sensitive Pointer Analysis for Java. In Proceedings of the 13th Asian Symposium on Programming Languages and Systems. 465–484. <https://doi.org/10.1007/978-3-319-26529-2_25>
780
780
781
-
[4] Cristian Cadar, Daniel Dunbar, and Dawson Engler. 2008. KLEE: Unassisted and Automatic Generation of High-Coverage Tests for Complex Systems Programs. In Proceedings of the 8th USENIX Conference on Operating Systems Design and Implementation. 209–224. https://www.usenix.org/legacy/event/osdi08/tech/full_papers/cadar/cadar.pdf
781
+
[4] Cristian Cadar, Daniel Dunbar, and Dawson Engler. 2008. KLEE: Unassisted and Automatic Generation of High-Coverage Tests for Complex Systems Programs. In Proceedings of the 8th USENIX Conference on Operating Systems Design and Implementation. 209–224. <https://www.usenix.org/legacy/event/osdi08/tech/full_papers/cadar/cadar.pdf>
0 commit comments