2014-04-25 1 views
1

이자벨의 목록 이론 filter에 대한 구문 번역을 설정 한 :이사벨 구문 번역 : Force eta-expansion?

syntax 
    -- {* Special syntax for filter *} 
    "_filter" :: "[pttrn, 'a list, bool] => 'a list" ("(1[_<-_./ _])") 

translations 
    "[x<-xs . P]"== "CONST filter (%x. P) xs" 

을 실제로 term "filter (λ x. ¬(P x)) l" 멋지게

"[x←l . ¬ P x]" :: "int list" 

를 인쇄하지만 표현은 간단 경우, 예를 들어, ilter (λ x. P x) l, ETA 수축이 일어날 것으로 보인다 나는

"filter P l" :: "int list" 

내가 어떻게 든 여기뿐만 아니라 좋은 구문 (즉 [x←l . P x])를 강제 할 수 표시 얻을?

답변

2

print_translation을 적절하게 설치하여 수축을 방지 할 수 있습니다. HOL 소스의 바인더와 튜플에 대한 몇 가지 예가 있습니다 (예 : THE, HOL.thy).

print_translation {* 
    [(@{const_syntax filter}, fn _ => fn [Abs abs, xs] => 
    let val (x, t) = Syntax_Trans.atomic_abs_tr' abs 
    in Syntax.const @{syntax_const "_filter"} $ x $ t $ xs end)] 
*} -- {* To avoid eta-contraction of body *} 
+0

예를 들어, 에 적응하기 쉽습니다. 이제는 그것을 이해하고 내가 만드는 구문에 적용해야합니다 :-). 이것이 HOL/List.thy라고 입력하는 것이 가치 있다고 생각하십니까? 출력이보다 일관되고 예측 가능해질 것으로 보인다. –

+0

이것을'HOL'에 넣을 지,'~~/src/HOL/Library/OptionalSugar'에 넣어야할지 모르겠습니다. 필자는 개인적으로'[x ← l] 대신'filter P xs'를 읽는 것을 선호합니다. P x]'. 안타깝게도 여러 Isabelle 도구는 이러한 기능을 확장합니다 (예 :'유도 '및'simp'에'filter'에 대한 합동 규칙 사용). 그러므로 '목록'이론에 그것을 추가하는 것은 공개적으로 논의되어야한다. –