diff options
author | Jason Gross <jgross@mit.edu> | 2018-04-22 14:50:53 -0400 |
---|---|---|
committer | Jason Gross <jasongross9@gmail.com> | 2018-05-05 18:01:31 -0400 |
commit | 9471c11b708e5f1c564ef4b5da8cc8a0a5df0c67 (patch) | |
tree | c1f844d7dd79548b6a893c2d52488b2e9474f3e7 /src/Experiments | |
parent | dd03058bd0729cda68e810a26920884b59d7c3db (diff) |
Add comment about leaky abstraction
Diffstat (limited to 'src/Experiments')
-rw-r--r-- | src/Experiments/PartialEvaluationWithLetIn.v | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/Experiments/PartialEvaluationWithLetIn.v b/src/Experiments/PartialEvaluationWithLetIn.v index c8140ea83..7b854af21 100644 --- a/src/Experiments/PartialEvaluationWithLetIn.v +++ b/src/Experiments/PartialEvaluationWithLetIn.v @@ -361,7 +361,15 @@ Module partial. (update_literal_with_state : abstract_domain' base.type.nat -> nat -> nat) (state_of_upperbound : forall T, upperboundT T -> abstract_domain' T) (bottom' : forall A, abstract_domain' A) - (** we need constructors for reify and destructors for intersect_state *) + (** we need constructors for reify and destructors for + intersect_state, which is needed to talk about how to do + cast on values; there's a leaky abstraction barrier + here: we assume that we can take apart the abstract + state via type structure and then put it back together + again, in order to cast values. But we don't require + that the abstract state is actually a pair on product + types, so we pay the cost of crossing that abstraction + barrier in both directions a decent amount *) (ident_Literal : nat -> pident parametric.base.type.nat) (ident_Pair : forall A B, pident (#A -> #B -> #A * #B)%ptype) (ident_Fst : forall A B, pident (#A * #B -> #A)%ptype) |