LINUX.ORG.RU

Coq 8.5

 ,


3

7

Тихо и незаметно вышла новая версия системы интерактивного доказательства теорем Coq (Петух).

Система Coq предоставляет язык Gallina (Курица) — функциональный язык с зависимыми типами, основанный на исчислении индуктивных конструкций. Особенностью данной системы является наличие особого подъязыка тактик доказательства (в отличии от, например, Агды, в которой пользователь конструирует элемент типа, являющийся доказательством, в явном виде с использованием интерактивного интерфейса, основанного на Emacs).

Coq используется как собственно в математике, так и для так называемого сертифицированного программирования — написания программ вместе с доказательством их корректности.

Основные новшества в версии 8.5:

  • асинхронное редактирование документов в CoqIDE, позволяющее работать с текущим доказательством, в то время как Coq проверяет другие доказательства в фоне;
  • полиморфизм относительно универсумов, позволяющий использовать одни и те же определения для универсумов разного уровня;
  • примитивные проекции, улучшающие временную и пространственную эффективность для записей и добавляющие для них эта-конверсию;
  • новый движок тактик;
  • новая процедура редукции native_compute, позволяющая вычислять термы, используя нативный компилятор OCaml'а;
  • новый быстрый режим компиляции, пропускающий проверку доказательств;
  • новая опция -type-in-type, позволяющая объединять иерархию типов в один универсум (делает логику несогласованной, но упрощает эксперименты);
  • заметное улучшение эффективности в целом.

>>> Новость

anonymous

Проверено: maxcom ()
Последнее исправление: Wizard_ (всего исправлений: 2)

Да и предикативный вывод лем так и не починили :(

Jewlix
()
Ответ на: комментарий от Manhunt

формального описания семантики для Си тупо не существует

Втопку этот недоязык. Есть же раст, давайте напишем для него (и будем тогда уже писать всю системщину на нем). Заодно докажем или опровергнем ту надежность, которую нам обещают его автора. Или для реальной многопоточнсти/многопроцессорности с одновременным доступом к памяти и недетерминированной перестановкой порядка выполнения команд еще не придумали формализма?

q0tw4 ★★★★
()
Ответ на: комментарий от anonymous

Либо мягкое «жь» (в русском отсутствует) в аргентинском испанском.

AlexM ★★★★★
()
Ответ на: комментарий от q0tw4

Есть же раст, давайте напишем для него

Для раста формальная семантика пока не написана. На сегодняшний день у них даже синтаксиса формального нет.

Manhunt ★★★★★
()
Ответ на: комментарий от Manhunt

На сегодняшний день у них даже синтаксиса формального нет.

Как-то нехорошо получилось без пруфов. Вот: https://doc.rust-lang.org/grammar.html , искать по слову «FIXME»

Manhunt ★★★★★
()

Ох, какая интересная штучка.

Вот бы освоить, а то все пердолю скалку для скучных дядей. А так было бы чем выдрюкиватсья.

lgbt
()
Ответ на: комментарий от lgbt

Нам очень интересно, информируй нас дальше.

anonymous
()
Ответ на: комментарий от Manhunt

На сегодняшний день у них даже синтаксиса формального нет.

У языка даже спецификации нет:

Rust does not have an exact specification yet

Как вообще так можно было выпускать версию 1.0?.. Не то что Go. Спецификация есть и по сравнению с С++ (1300+ страниц) и Джавой очень компактная. Интересно, как по сравнению с Си?

gag ★★★★★
()
Ответ на: комментарий от anonymous

Не плачь, все уже исправили. Не нужно виртуальных машин, написаных на убогих плюсах. Есть JVM на Java: https://en.wikipedia.org/wiki/Jikes_RVM

Не неси ересь. Единственная истинная джава-машина находится у преподобного Гослинга. Она сделана из чистого золота и внешне похожа на кофе-машину.

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

А по теме опять глупость. Верифицировать сишечку невозможно, ибо нет в ней искры. Это просто еще один антивирус касперский для программ, бессмысленный и беспощадный! А верифицировать джаву можно только для той единственной джава-машины. Это полезно, конечно, но не слишком функционально.

AVL2 ★★★★★
()
Последнее исправление: AVL2 (всего исправлений: 1)
Ответ на: комментарий от AVL2

А по теме опять глупость. Верифицировать сишечку невозможно

Ты тупенький, или просто охуевший? Какая такая сраная сишечка? Там божественную Джаву верифицируют.

anonymous
()
Ответ на: комментарий от Manhunt

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

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

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

Manhunt ★★★★★
()
Ответ на: комментарий от Manhunt

В каждой шутке есть доля шутки.

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

AVL2 ★★★★★
()
Ответ на: комментарий от anonymous

Там верифицируют и то и другое. И оба раза безумный фейл, потому что сишечка слишком убога и непредсказуема для верификации, а джава слишком божественна и поэтому непознаваема для сирых...

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

Думаю, что джаву и си, да и вообще любой ЯП принципиально несложно описать формально так, чтоб любая доказанная теорема о некоторой программе 100% выполнялась на практике (ну если не принимать во внимание долгие вычисления, которые юзер сочтет зависанием). Проблема в том, что для всех более менее сложных реально работающих программ, не то что доказывать теоремы, формулировать их потребуеться очень долго. Да и 100% сорвется доказательство, так как прогамма всегда содержит баги, хотя бы те, которые воспроизводятся только на практически бесполезных юзкейсах и никак не мешают нормальной работе программы (разве что могут быть использованы хакерами). Можно конечно сразу при написании проверять, но всеравно времязатраты будут нереальными, проще взять тот же rust для базовой защиты и не забывать про тесты.

q0tw4 ★★★★
()
Ответ на: комментарий от q0tw4

Сущая ахинея. Процедурные языки в принципе не вертфицируются в силу свой убогой природы. Функциональные же нефункциональны. И только джава явила собой сплав процедурности помноденной на императив объектной парадигмы «все уже сделано» в чем её уникальность и состоит .

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

Ололошки, да ты реально ебанутый...

anonymous
()
Ответ на: комментарий от AVL2

Джава хороша только одним: мизерное количество возможностей, следовательно очень легко построить мат модель (ну если только не многопоточную, там у джавы та же мутексная попа, что и везде). В си же придется в модели учитывать например то что если у нас есть struct { int x; int y; } s, то &s.x + 1 == &s.y и тому подобное, что в принципе муторно, зависит от компилятора итп, но вполне выполнимо.

q0tw4 ★★★★
()
Ответ на: комментарий от barberry

Докажи тестами, что a + b > a для всех положительных целых a и b. После тепловой смерти Вселенной возвращайся, обсудим, в чем ты был неправ.

anonymous
()
Ответ на: комментарий от q0tw4

Для верификации Си и вообще чего угодно императивного не надо строить модель семантики Си. Достаточно построить модель минимальной тупейшей виртуальной машины, и дальше тупо Хоаровскую логику применять (ну или ее расширение - separation logic, как в compcert). Отдельно доказывается корректность перевода твоего убогого Си или божественного Джава-кода в эту машину, но это уже задача совсем тривиальная.

anonymous
()
Ответ на: комментарий от anonymous

Хотел пример привести, но он зараза не работает. Но суть всеравно понятна.

#include <stdio.h>
#include <memory.h>
#include <stdlib.h>

const char* text = "Hello world\n";

void f() {
  printf(text);
}

void g() {}

typedef void (*fun)();

int main() {
  char* code = malloc((char*)(&g)-(char*)(&f));
  memcpy(code, &f, (char*)(&g)-(char*)(&f));
  ((fun)code)();
  return 0;
}

Поидее это хеловорлд. Интересно как подобное будет выглядеть в виртуальной машине? То, что тут его можно легко заменить на f(); не значит, что так будет всегда. А если усложнить задачу и написать содержимое code сразу в виде литерала? Да, конечно переносимости уже не будет, но доказывать хотя б для конекретной машины надо же.

q0tw4 ★★★★
()

новый движок тактик;

Спасибо, наконец то смог в танчиках нагнуть рандом

zolden ★★★★★
()
Ответ на: комментарий от q0tw4

Ок, доказывай хоть для x86, разницы никакой. Формальных Хоаровских моделей x86 хоть жопой жуй.

anonymous
()
Ответ на: комментарий от anonymous

Да я что, просто в идеале надо завязаться именно на модель x86 со всеми ее прибамбасами + низкоуровневые либы в виде отдельных моделей (ну или автогенерация теорем о libc по результатам анализа ее и ядра). Не помешал бы уже бот - автодоказыватель, иначе просто человекочасов на доказательства не хватит. Но о простой виртуалке для Си речь не идет, только если рассмотреть урезанный Си, с запретами на всякую гадость с самоизмененеим кода и особо извращенные операции с памятью. С джавкой все проще - там и так эти ограничения стоят. Вот почему не следует ожидать строгих доказательств произвольного Си-кода в ближайшем десятилетии. Да и раст пойдет с оговоркой, что все unsafe аксиомами. Но перспектив больше на счет раста.

q0tw4 ★★★★
()
Ответ на: комментарий от pacify

А еще есть это, толкько C#:

using System;
namespace project5
{
    class Program
    {
        static void Main(string[] args)
        {
         
        }

        class Petux
        {
            private int petux = "kukareku!";
            
            public Petux():this(5)
            {
                
            }

            public Petux(int i):this()
            {
                
            }
        }

    }
}

OlegUP
()
Ответ на: комментарий от OlegUP

А еще есть это, толкько C#

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

q0tw4 ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.