{"size": 938, "ext": "scrbl", "max_stars_repo_path": "scribblings/abstract-analysis-tree.scrbl", "max_stars_repo_name": "v-for-vincent/racket-control-compiler", "max_stars_repo_stars_event_min_datetime": "2017-06-03T19:55:16.000Z", "max_stars_repo_stars_event_max_datetime": "2017-06-03T19:55:16.000Z", "max_issues_repo_path": "scribblings/abstract-analysis-tree.scrbl", "max_issues_repo_name": "v-nys/cclp", "max_issues_repo_issues_event_min_datetime": "2017-04-11T08:13:36.000Z", "max_issues_repo_issues_event_max_datetime": "2018-04-18T13:16:06.000Z", "max_forks_repo_path": "scribblings/abstract-analysis-tree.scrbl", "max_forks_repo_name": "v-for-vincent/racket-control-compiler", "max_forks_repo_forks_event_min_datetime": null, "max_forks_repo_forks_event_max_datetime": null}
{"max_stars_count": 1, "max_issues_count": 58, "max_forks_count": null, "avg_line_length": 67.0, "max_line_length": 153, "alphanum_fraction": 0.7579957356}
#lang scribble/manual
@require[scribble-math]
@; still need to figure out how to render math properly

@title{Abstract analysis tree}
The purpose of the abstract analysis tree module is to represent the abstract analysis phase for compiling control.

@section{Design decisions}
None of the publications thus far have pointed out why, if there is a loop, a predecessor must be @emph{equivalent}, rather than more or equally general.
Consider an analysis of a variant of the sameleaves problem.
Suppose the top-level query is @$["sameleaves(a_1,a_2)"].
Suppose there is a clause @$["sameleaves(X,Y) :- X \\= g_1, Y \\= g_2, sameleaves(g_1,g_2)"], where @$["g_1"] and @$["g_2"] are concrete, ground trees.
Then, the resolvent @$["sameleaves(g_1,g_2)"] should not cycle back to its parent.
This would have the same effect as premature widening, i.e. it would hide part of the control flow from the analysis and, thus, from the transformation.