Как написать большой и большой клин на Изабель

Я пытаюсь использовать Изабель для автоматического доказательства. Однако у меня возникла проблема с указанием формул в Isabelle. Например, у меня есть такие формулы, как  введите описание изображения здесь Затем я определяю наборы и использую символы big_wedge и big_vee в Изабель как следует:  введите здесь описание изображения И результатом будет Внутренняя лексическая ошибка⌂ Не удалось проанализировать опору. Не могли бы вы объяснить, что здесь не так? Большое Вам спасибо.


person Trình Lê Khánh    schedule 07.10.2020    source источник
comment
Изабель уже использует большой клин как универсальную мета-количественную оценку, я подозреваю, что вы столкнулись с этим.   -  person Josh Chen    schedule 07.10.2020
comment
Спасибо, но использование Exist для big_vee и Universal для big_wedge кажется неразумным. Big_vee можно использовать как Universal. Например, \ forall x \ в N. \ bigvee Q_x.   -  person Trình Lê Khánh    schedule 07.10.2020
comment
Вы определили \ bigvee и \ bigwedge (определения нет на вашем скриншоте)? Эти обозначения не существуют по умолчанию.   -  person Mathias Fleury    schedule 07.10.2020
comment
Хм, насколько я знаю, эти символы предоставлены Изабель на вкладке «Символы / логика». Придется ли нам дать им новое определение?   -  person Trình Lê Khánh    schedule 07.10.2020


Ответы (1)


Не все символы, показанные на вкладках «Символы» Isabelle / jEdit, имеют значение. Это символы, которые вы можете использовать в своем коде.

Исходя из соответствующего кода для сумм, я начал настройку, но не закончил (в частности, не поддерживается синтаксис ⋀t!=l. P t).

context comm_monoid_add
begin

sublocale bigvee: comm_monoid_set HOL.disj False
  defines bigvee = bigvee.F and bigvee' = bigvee.G
  by standard auto

abbreviation bigvee'' :: ‹bool set ⇒ bool› ("⋁")
  where "⋁ ≡ bigvee (λx. x)"

sublocale bigwedge: comm_monoid_set HOL.conj True
  defines bigwedge = bigwedge.F and bigwedge' = bigwedge.G
  by standard auto

abbreviation bigwedge'' :: ‹bool set ⇒ bool› ("⋀")
  where "⋀ ≡ bigwedge (λx. x)"

end
syntax
  "_bigwedge" :: "pttrn ⇒ 'a set ⇒ 'b ⇒ 'b::comm_monoid_add"  ("(2⋀(_/∈_)./ _)" [0, 51, 10] 10)
translations ― ‹Beware of argument permutation!›
  "⋀i∈A. b" ⇌ "CONST bigwedge (λi. b) A"

syntax
  "_bigvee" :: "pttrn ⇒ 'a set ⇒ 'b ⇒ 'b::comm_monoid_add"  ("(2⋁(_/∈_)./ _)" [0, 51, 10] 10)
translations ― ‹Beware of argument permutation!›
  "⋁i∈A. b" ⇌ "CONST bigvee (λi. b) A"

instantiation bool :: comm_monoid_add
begin
definition zero_bool where
[simp]: ‹zero_bool = False›
definition plus_bool where
[simp]: ‹plus_bool = (∨)›
instance
  by standard auto
end
thm bigvee_def

lemma ‹finite A ⟹ (⋁i∈A. f i) ⟷ (∃i ∈ A. f i)›
  apply (induction rule: finite_induct)
  apply (auto simp: )
  done

lemma ‹finite A ⟹ (⋀i∈A. f i) ⟷ A = {} ∨ (∀i ∈ A. f i)›
  apply (induction rule: finite_induct)
  apply (auto simp: )[2]
  done

lemma ‹infinite A ⟹ (⋀i∈A. f i) ⟷ True›
  by auto

lemma test1:
  ‹(⋀j∈L. ⋀u∈U. ⋀t∈T. ⋀l∈L. ⋀l⇩1∈L⇩1. ¬P j u t l⇩1) ∨
   (⋁i∈I. ⋁v∈V. ⋀k∈K. ⋁h∈H. Q i ∨ k h) ⟹
   (⋁i∈I. ⋁v∈V. ⋀k∈K. ⋁h∈H. Q i ∨ k h) ∨ (⋀j∈J. ⋀u∈U. ⋀t∈T. ⋀l⇩1∈L⇩1. ¬P j u t l⇩1)›
  apply auto
  

Возможна полная настройка. Но я не уверен, что это хорошая идея ... Вам понадобится много лемм, чтобы все работало хорошо, и я не уверен, что поведение для бесконечных множеств правильное.

person Mathias Fleury    schedule 07.10.2020
comment
Спасибо. Похоже, что дают модель Deep Learning для младшего школьника =))). Я пытаюсь понять, что это. На самом деле, я был с Изабель всего около 3 дней - person Trình Lê Khánh; 08.10.2020
comment
Обозначения и переводы похожи на наихудший способ начать работу с Изабель ... Пока не обращайте на это внимания и используйте встроенные ∀ и ∃. - person Mathias Fleury; 08.10.2020
comment
Спасибо. Я видел, что вы использовали l1 \ в L1, в чем разница между L и L1? Это L1 = L \ {l}? - person Trình Lê Khánh; 08.10.2020
comment
В вашей формуле было l1 != l. Поскольку я не определил обозначение, я заменил его на l1 \in L1. - person Mathias Fleury; 08.10.2020
comment
Я написал это для l1 \ in L и l1! = L. Как мы можем это указать? - person Trình Lê Khánh; 10.10.2020
comment
Вы могли написать l1 \in L - {l}. - person Mathias Fleury; 10.10.2020
comment
Ой, спасибо: D. Могу я получить ваш контакт (электронную почту)? Я надеюсь, что смогу спросить вас по электронной почте. - person Trình Lê Khánh; 10.10.2020
comment
Попробуйте вместо этого (неофициальный) zulip Изабель isabelle.zulipchat.com (я тоже там, и другие люди могут дать свои предложения ). - person Mathias Fleury; 10.10.2020