Чому Coq має Prop?


35

Coq має тип Підтвердження нерелевантних пропозицій, які відкидаються під час видобутку. У чому причина цього, якщо ми використовуємо Coq лише для доказів. Prop непередбачуваний, тому Prop: Prop, однак, Coq автоматично підводить індекси Всесвіту, і ми можемо використовувати Type (i) замість них скрізь. Здається, Prop дуже багато ускладнює.

Я читав, що є філософські причини, що розмежовують Сет і Реп у книзі Ло, однак я не знайшов їх у книзі. Хто вони?


6
"Якщо ми використовуємо Coq лише для доказів": я думаю, ви тут визначили ключовий момент. Coq не використовується лише для доказів.
Жил "ТАК - перестань бути злим"

Відповіді:


34

дуже корисний для вилучення програми, оскільки дозволяє видалити непотрібні частини коду. Наприклад, щоб витягти алгоритм сортування ми доведемо твердження «для кожного списку л є список до такимщо до замовлена і до є permutatiom з л ». Якщо ми запишемо це в Coq і витягнемо, не використовуючи P r o p , отримаємо:PropkkkProp

  1. "для всіх є k " дасть нам карту, яка бере списки до списків,ksort
  2. "такий, що замовлений", дасть функціонал, який проходить через k і перевірить, чи він відсортований, іkverifyk
  3. " - перестановка " дасть перестановку, яка приймає до k . Зауважте, що це не просто відображення, а й обернене відображення разом з програмами, які підтверджують, що ці дві карти дійсно є оберненими.kpikpi

Незважаючи на те, що зайві речі не є абсолютно марними, у багатьох програмах ми хочемо позбутися від них і просто тримати sort. Це може бути досягнуто, якщо ми використовуємо для твердження " k впорядковано" і " k - перестановка ", але не "для всіх є k ".Propkkk

Загалом, поширеним способом вилучення коду є розгляд твердження форми де x є вхід, y - вихід, а ϕ ( x , y ) пояснює, що для y означаєправильний вихід. (В наведеному вище прикладіі В є типами списків і ф ( л , до ) є « до замовлено і до перестановці л .») Якщо φ в Р г про р , то витяг дає відображення F :x:A.y:B.ϕ(x,y)xyϕ(x,y)yABϕ(,k)kkϕProp такийщо φ ( х , е ( х ) ) виконується для всіх х . Якщо ϕ в S e t, то ми також отримаємо функцію g таку, що g ( x ) є доказом того, що ϕ ( x , f ( x ) ) є для всіх x Af:ABϕ(x,f(x))xAϕSetgg(x)ϕ(x,f(x))xA. Часто доказ обчислювально марний, і ми вважаємо за краще позбутися його, особливо коли він вкладений глибоко всередині якогось іншого твердження. дає нам можливість це зробити.Prop

Додано 29.07.2015: Існує питання, чи не могли б ми взагалі уникнути , автоматично оптимізуючи «непотрібний витягнутий код». В якійсь мірі ми можемо це зробити, наприклад, весь код, витягнутий з негативного фрагмента логіки (речі, побудовані з порожнього типу, тип одиниці, продукти), марний, оскільки він просто переміщується навколо одиниці. Але є справжні дизайнерські рішення, які треба приймати, використовуючи P r o p . Ось простий приклад, де Σ означає, що ми перебуваємо в T y p e, а означає, що ми перебуваємо в P r o p . Якщо ми витягуємо з PropPropΣTypeProp ми отримаємо програму, яка розкладає n на найнижчий біт b, а решта біт k , тобто вона обчислює все. Якщо дістати з Π n : N Σ b : { 0 , 1 }k : N

Πn:NΣb:{0,1}Σk:Nn=2k+b
nbk тоді програма обчислить лише найменший біт b . Машина не може сказати, що є правильним, користувач повинен сказати їй, що він хоче.
Πn:NΣb:{0,1}k:Nn=2k+b
b

1
Я трохи розгублений. Ви хочете сказати, що без було б неможливо визнати у витягнутій програмі, що g ( x ) не сприяє виводу (тобто це просто перевіряє це)? Чи існують сценарії, коли не вдасться витягнути такий непотрібний код звичайними засобами, доступними для оптимізаторів коду? Propg(x)
користувач

1
З вилученої програми можна було б сказати: "Я хочу ", і відкликати звідти. Я не зміг придумати сценарій настільки заплутаний, що ми не змогли оптимізувати все, що безпосередньо не сприяє визначенню перестановки, без того, щоб насправді це було необхідним для обчислення зазначеної перестановки (так чи інакше, з точки зору глобальної оптимізації. ). k
користувач

1
У вас немає інформації "Я хочу ". Це додаткове припущення, і очевидно, коли вони скажуть вам, якого конкретного результату вони хочуть, ви можете просто оптимізувати відключений мертвий код. Власне, я подумав про кращу відповідь: це питання дизайну, які речі поставити в P r o p . Вам потрібно знати, чого хоче користувач, і він говорить вам, що він хоче, використовуючи P r o p . Неважко придумати приклади, коли є кілька варіантів. Я додам його до своєї відповіді. kPropProp
Андрій Бауер

2
Наскільки я знаю, ніхто насправді не може сказати, як витягти що-небудь з -типів. Зрозуміло, що вони містять деякий обчислювальний вміст, але не те, що це може бути. (1)
Андрій Бауер

3
Ага, гаразд. Використання як способу конкретизації дизайнерських рішень має для мене набагато більше сенсу, ніж як спосіб видалення непотрібного коду. Prop
користувач

19

Prop

impredicative Prop+large elimination+excluded middle

є непослідовним. Зазвичай ви хочете зберегти можливість додати виключену середину, тому одне рішення - тримати велику елімінацію та робити прогноз прогнозним. Інше - придушити велику ліквідацію.

Кок зробив і те, і інше! Вони перейменували предикативний Prop на Set і відключили велику елімінацію в Prop.

Експресивність, здобута непередбачуваністю, є "заспокійливою" в сенсі, 99% "розумної" математики можна формалізувати з нею, і, як відомо, вона є послідовною щодо теорії множин. Це ймовірно, що вони не ослабнуть це на щось на кшталт Агда, що має лише предикативні всесвіти.


8
О, і я забув згадати: це не так Prop : Prop, що було б непослідовно. Швидше кількісна оцінка всіх пропозицій - це знову судження.
коді

Не могли б ви вказати мені більше ресурсів з цього приводу? Все, що я можу знайти, здається дуже розсіяним.
user833970

1
@ user833970 якісь конкретні речі, на які ви хочете вказувати? Боюся, насправді не існує всеохоплюючої посилання на мета-теорію залежних типів. Ця дискусія (яка тут вказує!) Може бути корисною: github.com/FStarLang/FStar/isissue/360
cody

дякую, я зараз працюю над документом парадокса Берарді, я думаю, це очистить мою розгубленість.
user833970

14

Навіть якщо ви не зацікавлені у витягуванні програм, той факт, що Propнепередбачуваний, дозволяє будувати деякі моделі, які ви не можете побудувати, використовуючи предикативну вежу Всесвітів. IIRC Торстен Альтенкірх має модель системи F з використанням непередбачуваності Кока.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.