Свободные переменные в Coq
Есть ли какая-либо функция / команда, чтобы получить / проверить, существует ли свободная переменная, скажем, n:U, в термине / выражении e, используя Coq? Поделись, пожалуйста.
Например, я хочу заявить, что "n не встречается в свободных именах e" в Coq.
Спасибо,
вилайат
1 ответ
Предположим, вы говорите о свободных переменных в терминах Coq:
Имея дело с элементарным доказательством Coq (не используя ничего внешнего), вы манипулируете вне контекста доказательства закрытым термином, то есть термином с только связанными переменными. Если в режиме доказательства термин e
в вашей цели, кажется, есть свободная переменная n
(имеется в виду переменная n
находится где-то в вашем контрольном контексте), вы можете просто сделать привязку явной (и закрыть целевой термин), используя generalize
тактика.
В более сложных случаях ваше менее ванильное доказательство может включать свободные переменные в форме предположений или параметров, и в этом случае вы можете перечислить их, используя Print Assumptions
,
Если, с другой стороны, вы говорите об использовании терминов Coq для представления понятия термина на определенном языке (например, вы формализуете такой язык), вам просто нужно уделить особое внимание свободным переменным вашего языка.
При условии, что вы дадите им конкретный конструктор в индуктивном определении терминов вашего языка, должно быть легко указать, имеет ли какой-то термин свободные переменные или нет. Если вы не знакомы с (не так тривиальным) понятием представления замещения и свободных переменных языка, вы найдете указатели с возрастающей степенью точности от TAPL до курса BCPierce по SF и результатов POPLMark Challenge.