2016-10-14 2 views
4

Так что я читал эту статью по разработчику отражения (https://eb.host.cs.st-andrews.ac.uk/drafts/elab-reflection.pdf) и решил, что я хотел бы попробовать эту эту тактику из (найденную в разделе 5.2):Идрис месиво тактика

mush : Elab() 
mush = 
    do attack 
     x <- gensym "x" 
     intro x 
     try intros 
     induction (Var x) `andThen` auto 
     solve 

Supposedly эта тактика может оказаться ассоциативность сложения :

plusAssoc : (j, k, l : Nat) -> plus (plus j k) l = plus j (plus k l) 
plusAssoc = %runElab mush 

однако при попытке typecheck кашицы я получаю следующее сообщение об ошибке:

ошибка: не терминатор, ожидаемый: "$", "& & ",") "," ","> "," + "," ++ "," - "," -> ",". ","/","/= ",": :», ";", "<", "", "< ", "<>", "< +>", "< <", "< =", "< |>", "=" , "==", ">", "> =", ">>", ">> =", "\\", "", "in", "||", "~ = ~", " двусмысленное использование лево-ассоциативного оператора, двусмысленное использование неассоциативного оператора, двусмысленное использование право-ассоциативного оператора, конец ввода, сопоставление выражения приложения, где блок x < - gensym "x"^

I не понимаю, что не так, не так ли правильная тактика или нет? нужно добавить в мой файл?

ответ

2

Прежде всего, вам нужно добавить импорт:

import Language.Reflection 
import Pruviloj.Core 
import Pruviloj.Induction 

auto : Elab() 
auto = 
    do compute 
    attack 
    try intros 
    hs <- map fst <$> getEnv 
    for_ hs $ 
     \ih => try (rewriteWith (Var ih)) 
    hypothesis <|> search 
    solve 

mush : Elab() 
mush = 
    do attack 
     x <- gensym "x" 
     intro x 
     try intros 
     induction (Var x) `andThen` auto 
     solve 

plusAssoc : (j, k, l : Nat) -> plus (plus j k) l = plus j (plus k l) 
plusAssoc = %runElab mush 

Тогда вам нужно сказать Идриса использовать пакет Pruviloj:

idris -p pruviloj <fileName.idr> 

Это typechecks и работает, но я не был» t может воспроизводить ваше сообщение об ошибке.

+0

Это работает при запуске командной строки! Теперь мне просто нужно выяснить, почему Atom не находит Pruviloj.Core. – user2270439

+1

Создайте '.ipkg' файл' 'со следующей строкой в ​​нем -' opts = "-p pruviloj" '. [Здесь] (https://github.com/idris-hackers/atom-language-idris/issues/29) вы можете найти более подробную информацию. –

Смежные вопросы