Во-первых, чтобы действительно добавить некоторую ценность, я покажу, как использовать declare
для добавления C1_def
в качестве правила simp
. Затем я даю вам несколько незапрошенных указаний о вашем lemma
, а затем я даю вам несколько незапрошенных указаний об этикете Stackoverflow (с моей точки зрения).
Объявление определения простым правилом
Как отметил Александр, правило definition
не добавляется автоматически в качестве правила simp
.
Вы можете объявить это как правило simp
следующим образом:
declare C1_def [simp add]
Использование простых правил методами автоматического доказательства auto
, simp
, fastforce
и т. д. может привести к неправильному зацикливанию или расширению формул таким образом, что вы не хотите расширять формулы, поэтому после добавления вы можете удалить его как simp
правило такое:
declare C1_def [simp del]
Комментарии к вашей лемме
Возможно, формула в вашей лемме именно то, что вам нужно, но ваша запись, на мой взгляд, является потенциальным источником путаницы. В частности, вы используете Person
и как имя типа, и как заданную переменную. Я делаю эти комментарии, не прося разъяснений.
Для себя у меня вопрос был, Как это p ∈ Person
не выдает ошибку, потому что Person
есть набор, где Person
в typedecl Person
нет набора.
Один из способов получить дополнительную информацию — использовать declare [[show_types, show_consts]]
.
Чтобы ответить на мой вопрос, я сделал следующее (преобразование символов для переносимости браузера) и показываю часть того, что я видел на панели вывода:
declare [[show_types, show_consts]]
lemma "[|(!p::Person. age p > 20); p ∈ Person|] ==> (age p > 20)"
oops
(*OUTPUT:
variables:
Person :: Person set
p :: Person *)
Это показывает мне, что Person
является свободной переменной. Что касается p
, то это связанная переменная в (!p::Person. age p > 20)
, но она свободна в остальной части леммы, поэтому ваша гипотеза включает формулу, согласно которой каждое p
типа Person
находится в каждом наборе типа Person set
.
Возможно, это то, что вы хотите, но в данном случае это не имеет значения, потому что ваша лемма в основном имеет вид A and B implies A
.
Вам нужно принять ответ на отвеченный вопрос SO
Прежде чем исчезнуть примерно через 2 часа, за тегом isabelle
, я снова исполняю свой любимый долг полиции этикета SO.
Вы задали три вопроса. В частности, есть такой:
Это прямой вопрос, и на него дан прямой ответ. Вы должны принять это как ответ. В противном случае,
- когда люди нажимают на вкладку без ответа для тега Изабель, она может отображаться как неотвеченная, когда на нее не было ответа,
- вы не проявляете должной признательности за полученный ответ.
В случае вопроса, на который я ссылался, вы получили ответ от одного из экспертов Isbelle/HOL (в отличие от меня). Человеку требуется значительное количество времени, чтобы ввести такой ответ. Он не очень длинный, но и не однострочный.
person
Community
schedule
07.11.2014