<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://pascalabc.net/wiki/index.php?action=history&amp;feed=atom&amp;title=%D0%A1%D1%82%D0%B0%D1%80%D0%BE%D0%B5_%D0%BD%D0%B5%D0%B2%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D0%B2_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B5_%D1%82%D0%B8%D0%BF%D0%BE%D0%B2</id>
	<title>Старое неверное в выводе типов - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://pascalabc.net/wiki/index.php?action=history&amp;feed=atom&amp;title=%D0%A1%D1%82%D0%B0%D1%80%D0%BE%D0%B5_%D0%BD%D0%B5%D0%B2%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D0%B2_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B5_%D1%82%D0%B8%D0%BF%D0%BE%D0%B2"/>
	<link rel="alternate" type="text/html" href="https://pascalabc.net/wiki/index.php?title=%D0%A1%D1%82%D0%B0%D1%80%D0%BE%D0%B5_%D0%BD%D0%B5%D0%B2%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D0%B2_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B5_%D1%82%D0%B8%D0%BF%D0%BE%D0%B2&amp;action=history"/>
	<updated>2026-04-18T10:42:03Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.39.1</generator>
	<entry>
		<id>https://pascalabc.net/wiki/index.php?title=%D0%A1%D1%82%D0%B0%D1%80%D0%BE%D0%B5_%D0%BD%D0%B5%D0%B2%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D0%B2_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B5_%D1%82%D0%B8%D0%BF%D0%BE%D0%B2&amp;diff=2710&amp;oldid=prev</id>
		<title>Mikst: Новая страница: «==== Уравнения, порождаемые подстановкой фактических параметров вместо формальных S ↪ T ===…»</title>
		<link rel="alternate" type="text/html" href="https://pascalabc.net/wiki/index.php?title=%D0%A1%D1%82%D0%B0%D1%80%D0%BE%D0%B5_%D0%BD%D0%B5%D0%B2%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D0%B2_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B5_%D1%82%D0%B8%D0%BF%D0%BE%D0%B2&amp;diff=2710&amp;oldid=prev"/>
		<updated>2014-07-07T11:22:41Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «==== Уравнения, порождаемые подстановкой фактических параметров вместо формальных S ↪ T ===…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==== Уравнения, порождаемые подстановкой фактических параметров вместо формальных S ↪ T ==== &lt;br /&gt;
Рассмотрим подробно, какие уравнения возникают при подстановке фактических параметров вместо формальных  S ↪ T.&lt;br /&gt;
&lt;br /&gt;
Далее X - конкретный тип (класс), T - типовая переменная, V - вектор типовых переменных или конкретных типов, C&amp;lt;V&amp;gt; - обобщенный класс, I - интерфейс (возможно, обобщенный, т.е. I&amp;lt;V&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Возможны следующие варианты:&lt;br /&gt;
&lt;br /&gt;
*'''I ↪ C&amp;lt;V&amp;gt;'''&lt;br /&gt;
*'''I ↪ T'''&lt;br /&gt;
*'''I ↪ X'''&lt;br /&gt;
Ошибка. Интерфейс нельзя подставить вместо типа&lt;br /&gt;
&lt;br /&gt;
*'''X ↪ C&amp;lt;V&amp;gt;'''&lt;br /&gt;
Ошибка. Конкретный тип нельзя подставить вместо обобщенного типа&lt;br /&gt;
&lt;br /&gt;
*'''C&amp;lt;V&amp;gt; ↪ X'''&lt;br /&gt;
Это сделать можно если C&amp;lt;V&amp;gt; является наследником конкретного типа X (если контекст Γ содержит ограничение C&amp;lt;V&amp;gt; &amp;lt;: X). Никаких уравнений при этом не генерируется.&lt;br /&gt;
&lt;br /&gt;
*'''X ↪ I&amp;lt;V&amp;gt;'''&lt;br /&gt;
Ошибка. Конкретный тип нельзя подставить вместо обобщенного интерфейса&lt;br /&gt;
&lt;br /&gt;
*'''T ↪ C&amp;lt;V&amp;gt;'''&lt;br /&gt;
Если в ограничениях where есть T &amp;lt;: C&amp;lt;V&amp;gt; (правильнее говорить - если контекст Γ содержит ограничение T &amp;lt;: C&amp;lt;V&amp;gt;), то просто пропускаем эту подстановку - уравнения при этом не генерируются.&lt;br /&gt;
В противном случае - ошибка&lt;br /&gt;
&lt;br /&gt;
*'''C&amp;lt;V&amp;gt; ↪ T'''&lt;br /&gt;
Обобщенный класс можно подставить вместо типовой переменной. Это дает новое уравнение&lt;br /&gt;
 T = C&amp;lt;V&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*'''T ↪ I&amp;lt;V&amp;gt;'''&lt;br /&gt;
Если контекст Γ содержит ограничение T &amp;lt;: I&amp;lt;V&amp;gt;, то это дает уравнение&lt;br /&gt;
 T = I&amp;lt;V&amp;gt; &lt;br /&gt;
В противном случае - ошибка&lt;br /&gt;
&lt;br /&gt;
*'''C&amp;lt;V&amp;gt; ↪ I&amp;lt;V1&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
*'''C&amp;lt;V&amp;gt; ↪ C1&amp;lt;V1&amp;gt;'''&lt;br /&gt;
Это возможно в двух ситуациях: &lt;br /&gt;
&lt;br /&gt;
если C&amp;lt;V&amp;gt; &amp;lt;: C1&amp;lt;VV&amp;gt; тогда надо положить &lt;br /&gt;
 V1 = VV (вектор уравнений).&lt;br /&gt;
иначе если C = C1, то&lt;br /&gt;
 V = V1 &lt;br /&gt;
иначе - ошибка&lt;br /&gt;
&lt;br /&gt;
*'''I ↪ I1'''&lt;br /&gt;
Необходимо проверить, есть ли в контексте I &amp;lt;: I1. &lt;br /&gt;
Если нет - ошибка.&lt;br /&gt;
&lt;br /&gt;
*'''I&amp;lt;V&amp;gt; ↪ I1&amp;lt;V1&amp;gt;'''&lt;br /&gt;
Если I&amp;lt;V&amp;gt; &amp;lt;: I1&amp;lt;VV&amp;gt; то &lt;br /&gt;
 V1 = VV &lt;br /&gt;
иначе если I = I1, то&lt;br /&gt;
 V = V1 &lt;br /&gt;
иначе ошибка&lt;/div&gt;</summary>
		<author><name>Mikst</name></author>
	</entry>
</feed>