diff options
author | 2017-10-20 02:27:28 -0400 | |
---|---|---|
committer | 2017-10-20 02:27:28 -0400 | |
commit | 5d3ea91871dc979199fe2b58cc866e0aa24973c3 (patch) | |
tree | 06350ceb5aa9e39bec7eebc6f113c16a698f05e1 /src | |
parent | 19f2d44ac898a345b7f35acba5103cc476005766 (diff) |
Add wff_SmartPairf
Diffstat (limited to 'src')
-rw-r--r-- | src/Compilers/WfProofs.v | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/Compilers/WfProofs.v b/src/Compilers/WfProofs.v index c72680010..02ae958e8 100644 --- a/src/Compilers/WfProofs.v +++ b/src/Compilers/WfProofs.v @@ -124,6 +124,20 @@ Section language. | _ => progress inversion_wf end. Qed. + + Lemma wff_SmartPairf G {t t'} v1 v2 x1 x2 + (Hin : List.In (existT (fun t : base_type_code => (exprf (Tbase t) * exprf (Tbase t))%type) t (x1, x2)) + (flatten_binding_list (t:=t') v1 v2)) + (Hwf : wff G (SmartPairf v1) (SmartPairf v2)) + : @wff var1 var2 G (Tbase t) x1 x2. + Proof using Type. + revert dependent G; induction t'; intros; simpl in *; try tauto. + { intuition (inversion_sigma; inversion_prod; subst; simpl; eauto). } + { unfold SmartPairf in *; simpl in *. + inversion_wf; destruct_head'_and. + apply List.in_app_iff in Hin. + intuition (inversion_sigma; inversion_prod; subst; eauto). } + Qed. End with_var. Definition duplicate_type {var1 var2} |