ак ¤ могу интерпретировать правила набора текста на этой бумаге?

1

haskell,functional-programming,type-systems,

Haskell, функционально-программирование, тип-система,

Ответов: 10


Ёто немного слишком широко, но из ваших комментариев ¤ предполагаю, что вам не хватает базовых систем линейного типа. Ёта система ослабевает (обычно не допускаетс¤ в линейной логике), поэтому она фактически соответствует аффинной интуиционистской логике.

ќсновна¤ иде¤ заключаетс¤ в том, что вы можете использовать каждое значение, которое у вас есть (например, переменные) не более одного раза .

“ип !A -o !B(тензорный продукт) примерно соответствует типу значений пары, из которого вы можете проецировать как Aзначение, так и Bзначение.

“ип !A -o (!A (x) !A)означает линейную функцию, котора¤ потребл¤ет значение A(помните: не более одного использовани¤!) » создает единицу B.

” вас может быть, например, но вы не можете иметь какой-либо термин, так как это потребует от вас дважды использовать аргумент.a. (a (x) a)G |- t: A G, x:A |- u: B -------------------------------- G |- u[t/x]: B

“ип t(Ђ, конечно, A!ї) ќбозначает значени¤ типа, Aкоторые могут быть дублированы так же, как и в случае, как обычно, в нелинейных л¤мбда-исчислени¤х. Ёто делаетс¤ по правилу сокращени¤.

Ќапример, uпредставл¤ет собой обычную функцию: она требует значени¤ (в неограниченном количестве копий) и создает значение (в неограниченном количестве копий). ¬ы можете написать функцию Gследующим образом:

u[t/x]

ќбратите внимание, что каждое правило линейного типировани¤ с несколькими помещени¤ми должно разбивать переменные среды между помещени¤ми (например, один получает Gamma, друга¤ Delta), без перекрыти¤. ¬ противном случае вы можете дублировать линейные переменные. »з-за этого у —ократа есть два контекста. Ќелинейным разрезом будет:

G1 |- t: A        G2, x:A |- u: B
--------------------------------
  G1,G2 |- u[t/x]: B

но здесь оба термина tи uмогут использовать переменные в G, поэтому tмогут использовать переменные дважды - не очень хорошо. ¬место этого линейный срез

u

заставл¤ет вас разделить переменные между двум¤ помещени¤ми: то, что вы используете, tнедоступно u.

Haskell, функционально-программирование, тип-система,
Похожие вопросы