- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
Короче, размышлял я как-то на тему того, как надо делать правильный
теорем прувер, а не питушню всякую заедушную. Вот взять тот же Metamath -
там какие-то непонятные distinct правила для хуиты, что надо какие-то там
disjoint переменные, вот тут https://groups.google.com/g/metamath/c/M2dUfFATxD8
про это подробнее сказано.
Есть вот еще Metamath zero https://github.com/digama0/mm0 и это вот кажется ближе
к тому, что мне нравится.
Например вот https://github.com/digama0/mm0/blob/master/examples/assembler.mm1
тут есть какая-то теорема про ELF хедер. Это вот определение ELF идентификатора
local def ELF_IDENT_s: string =
$ ,0x7f ': ,"E" ': ,"L" ': ,"F" ':
_x02 ': _x01 ': _x01 ': _x00 ': _x00x8 $;
и там еще какой-то такой хуйней описывается то, где там точка входа записана в заголовке,
еще separation logic есть какая-то.
Но вот если почитать спецификацию для этого mm0 языка
https://github.com/digama0/mm0/blob/master/mm0.md :
pure means that this sort does not have any term formers. It is an uninterpreted domain which may have
variables but has no constant symbols, binary operators, or anything else targeting this sort. If a sort has
this modifier, it is illegal to declare a term with this sort as the target.
strict is the "opposite" of pure: it says that the sort does not have any variable binding operators. It is illegal
to have a bound variable or dummy variable of this sort, and it cannot appear as a dependency in another
variable. For example, if x: set and ph: wff x then set must not be declared strict. (pure and strict are not
mutually exclusive, although a sort with both properties is not very useful.)
provable means that the sort is a thing that can be "proven". All formulas appearing in axioms and theorems
(between $) must have a provable sort.
free means that definitions and theorems are not allowed to use dummy variables with this sort.
то кажется мне, что слишком это сложно. Надо проще это всё сделать, по принципу какой-нибудь
хрени типа SKI кобенационного исчисления. Т.е. допустим аксиома для модус поненса
AXIOM
%A
P P $IMP %A %B
_
%B
т.е. если мы матчим некую хуйню "%A" и некую хуйню "P P $IMP %A %B" где %A и %B это некая
срань, которая может быть "что-то" "P чтото чтото" или там "P чтото P чтото чтото" и т.д.
ну короче P означает что там две какие-то хуйни, вот как в той хрени https://govnokod.ru/27420
то можем дополнительно синтезировать высказывание "%B"
А теоремы это negj композиции из аксиом и других теорем. Типы можно прикручивать через какую-то хуйню
типа если арифметику Пеано описывать, тип можно так что-то нахуевертить аксиому, ну типа
Определение что ZERO это натуральное число.
AXIOM
_
P NAT ZERO
Что если инкрементнуть натуральное, будет тоже натуральное (S это функция следования)
AXIOM
P S %A
P NAT %A
_
P NAT P S %A
В общем надо бы подумать, как там запилить максимально простой и эффективно расширяемый язык для
доказывания всякой хуйни.
Смотрел Coq - какая-то ебаная перепитушня со всякими там типами-хуипами и какими-то
блядь рекурсиями. Хер поймешь, как эта вся дрнсня работает. Меня ваши типы не ебут
совершенно, я хочу сам свои типы конструировать, а не полагаться на какую-то невнятную
ебанину.