Как написать ARG_MIN в Isabelle

#isabelle

#isabelle

Вопрос:

Я пытаюсь переписать следующее arg_min выражение в Isabelle (2020) в более удобный синтаксис ARG_MIN.

 lemma "1 = arg_min (λ(x::int). x*x) ((<) 0)"
 

Что у меня есть до сих пор:

 lemma "1 = (ARG_MIN ((x::int)*x). 0 < x)"
 

Но это выдает мне «Внутреннюю синтаксическую ошибку».

Мне просто интересно, как правильно использовать ARG_MIN выше.

Ответ №1:

Посмотрите на синтаксический перевод из ARG_MIN (найденный с помощью C-щелчка по arg_min и просмотра нескольких строк после этого определения):

 translations
  "ARG_MIN f x. P" ⇌ "CONST arg_min f (λx. P)"
 

Вы хотите иметь arg_min (λ(x::int). x*x) (λx. x < 0) . Таким образом, сопоставляя значения P, x и f, обозначение становится:

 ARG_MIN (λ(x::int). x*x) x. (x < 0)
 

Комментарии:

1. Тьфу, этот синтаксис ужасен. Я думаю, что я изменю это на что-то более приемлемое в ближайшие несколько месяцев, возможно ARG_MIN x∈A. f x , или в этом случае ARG_MIN x | x < 0. x * x .

2. Пожалуйста, сделайте! Синтаксис не дает мне никакой интуиции о том, что здесь происходит. (Но я все равно не использую такие вещи).