<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<link href="coqdoc.css" rel="stylesheet" type="text/css"/>
<title>sn_commute</title>
</head>

<body>

<div id="page">

<div id="header">
</div>

<div id="main">

<h1 class="libtitle">Library sn_commute</h1>

<div class="code">
<span class="id" type="keyword">Global</span>&nbsp;<span class="id" type="var">Generalizable</span> <span class="id" type="var">All</span> <span class="id" type="keyword">Variables</span>.<br/>
<span class="id" type="keyword">Global</span>&nbsp;<span class="id" type="keyword">Set</span> <span class="id" type="var">Automatic</span> <span class="id" type="var">Introduction</span>.<br/>

<br/>
<span class="id" type="keyword">Require</span> <span class="id" type="keyword">Import</span> <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8.html#"><span class="id" type="library">Utf8</span></a> <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Setoids.Setoid.html#"><span class="id" type="library">Setoid</span></a>.<br/>

<br/>
<span class="id" type="var">Reserved</span> <span class="id" type="keyword">Infix</span> "∪" (<span class="id" type="tactic">at</span> <span class="id" type="var">level</span> 50).<br/>
<span class="id" type="var">Reserved Notation </span>"A *" (<span class="id" type="tactic">at</span> <span class="id" type="var">level</span> 10).<br/>

<br/>
<span class="id" type="keyword">Inductive</span> <a name="rtc"><span class="id" type="inductive">rtc</span></a> `(<span class="id" type="var">A</span> : <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Relations.Relation_Definitions.html#relation"><span class="id" type="definition">relation</span></a> <span class="id" type="var">T</span>) : <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Relations.Relation_Definitions.html#relation"><span class="id" type="definition">relation</span></a> <span class="id" type="var">T</span> := <br/>
&nbsp;&nbsp;| <a name="rtc_refl"><span class="id" type="constructor">rtc_refl</span></a> <span class="id" type="var">t</span> : <span class="id" type="var">A</span><a class="idref" href="sn_commute.html#::x_'*'"><span class="id" type="notation">*</span></a> <a class="idref" href="sn_commute.html#t"><span class="id" type="variable">t</span></a> <a class="idref" href="sn_commute.html#t"><span class="id" type="variable">t</span></a><br/>
&nbsp;&nbsp;| <a name="rtc_step"><span class="id" type="constructor">rtc_step</span></a> <span class="id" type="var">t₁</span> <span class="id" type="var">t₂</span> <span class="id" type="var">t₃</span> : <span class="id" type="var">A</span> <a class="idref" href="sn_commute.html#t₁"><span class="id" type="variable">t₁</span></a> <a class="idref" href="sn_commute.html#t₂"><span class="id" type="variable">t₂</span></a> <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:x_'→'_x"><span class="id" type="notation">→</span></a> <span class="id" type="var">A</span><a class="idref" href="sn_commute.html#::x_'*'"><span class="id" type="notation">*</span></a> <a class="idref" href="sn_commute.html#t₂"><span class="id" type="variable">t₂</span></a> <a class="idref" href="sn_commute.html#t₃"><span class="id" type="variable">t₃</span></a> <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:x_'→'_x"><span class="id" type="notation">→</span></a> <span class="id" type="var">A</span><a class="idref" href="sn_commute.html#::x_'*'"><span class="id" type="notation">*</span></a> <a class="idref" href="sn_commute.html#t₁"><span class="id" type="variable">t₁</span></a> <a class="idref" href="sn_commute.html#t₃"><span class="id" type="variable">t₃</span></a><br/>
<span class="id" type="var">where </span><a name="::x_'*'"><span class="id" type="notation">"</span></a>A *" := (@<a class="idref" href="sn_commute.html#rtc"><span class="id" type="inductive">rtc</span></a> <span class="id" type="var">_</span> <span class="id" type="var">A</span>).<br/>
<span class="id" type="keyword">Hint</span> <span class="id" type="var">Constructors</span> <span class="id" type="var">rtc</span> : <span class="id" type="var">trs</span>.<br/>

<br/>
<span class="id" type="keyword">Lemma</span> <a name="rtc_trans"><span class="id" type="lemma">rtc_trans</span></a> `(<span class="id" type="var">A</span> : <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Relations.Relation_Definitions.html#relation"><span class="id" type="definition">relation</span></a> <span class="id" type="var">T</span>) <span class="id" type="var">t₁</span> <span class="id" type="var">t₂</span> <span class="id" type="var">t₃</span> : <a class="idref" href="sn_commute.html#A"><span class="id" type="variable">A</span></a><a class="idref" href="sn_commute.html#::x_'*'"><span class="id" type="notation">*</span></a> <a class="idref" href="sn_commute.html#t₁"><span class="id" type="variable">t₁</span></a> <a class="idref" href="sn_commute.html#t₂"><span class="id" type="variable">t₂</span></a> <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:x_'→'_x"><span class="id" type="notation">→</span></a> <a class="idref" href="sn_commute.html#A"><span class="id" type="variable">A</span></a><a class="idref" href="sn_commute.html#::x_'*'"><span class="id" type="notation">*</span></a> <a class="idref" href="sn_commute.html#t₂"><span class="id" type="variable">t₂</span></a> <a class="idref" href="sn_commute.html#t₃"><span class="id" type="variable">t₃</span></a> <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:x_'→'_x"><span class="id" type="notation">→</span></a> <a class="idref" href="sn_commute.html#A"><span class="id" type="variable">A</span></a><a class="idref" href="sn_commute.html#::x_'*'"><span class="id" type="notation">*</span></a> <a class="idref" href="sn_commute.html#t₁"><span class="id" type="variable">t₁</span></a> <a class="idref" href="sn_commute.html#t₃"><span class="id" type="variable">t₃</span></a>.<br/>
<span class="id" type="keyword">Proof</span>. <span class="id" type="tactic">induction</span> 1; <span class="id" type="tactic">eauto</span> <span class="id" type="keyword">with</span> <span class="id" type="var">trs</span>. <span class="id" type="keyword">Qed</span>.<br/>
<span class="id" type="keyword">Hint</span> <span class="id" type="keyword">Resolve</span> <a class="idref" href="sn_commute.html#rtc_trans"><span class="id" type="lemma">rtc_trans</span></a> : <span class="id" type="var">trs</span>.<br/>

<br/>
<span class="id" type="keyword">Inductive</span> <a name="SN"><span class="id" type="inductive">SN</span></a> `(<span class="id" type="var">A</span> : <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Relations.Relation_Definitions.html#relation"><span class="id" type="definition">relation</span></a> <span class="id" type="var">T</span>) : <span class="id" type="var">T</span> <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:x_'→'_x"><span class="id" type="notation">→</span></a> <span class="id" type="keyword">Prop</span> :=<br/>
&nbsp;&nbsp;| <a name="sn_make"><span class="id" type="constructor">sn_make</span></a> <span class="id" type="var">t</span> : <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:x_'→'_x"><span class="id" type="notation">(</span></a><a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:'∀'_x_'..'_x_','_x"><span class="id" type="notation">∀</span></a> <span class="id" type="var">t'</span><a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:'∀'_x_'..'_x_','_x"><span class="id" type="notation">,</span></a> <span class="id" type="var">A</span> <a class="idref" href="sn_commute.html#t"><span class="id" type="variable">t</span></a> <a class="idref" href="sn_commute.html#t'"><span class="id" type="variable">t'</span></a> <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:x_'→'_x"><span class="id" type="notation">→</span></a> <a class="idref" href="sn_commute.html#SN"><span class="id" type="inductive">SN</span></a> <span class="id" type="var">A</span> <a class="idref" href="sn_commute.html#t'"><span class="id" type="variable">t'</span></a><a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:x_'→'_x"><span class="id" type="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:x_'→'_x"><span class="id" type="notation">→</span></a> <a class="idref" href="sn_commute.html#SN"><span class="id" type="inductive">SN</span></a> <span class="id" type="var">A</span> <a class="idref" href="sn_commute.html#t"><span class="id" type="variable">t</span></a>.<br/>
<span class="id" type="keyword">Hint</span> <span class="id" type="var">Constructors</span> <span class="id" type="var">SN</span> : <span class="id" type="var">trs</span>.<br/>

<br/>
<span class="id" type="keyword">Section</span> <a name="sn"><span class="id" type="section">sn</span></a>.<br/>
&nbsp;&nbsp;<span class="id" type="keyword">Context</span> `(<span class="id" type="var">A</span> : <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Relations.Relation_Definitions.html#relation"><span class="id" type="definition">relation</span></a> <span class="id" type="var">T</span>).<br/>
&nbsp;&nbsp;<span class="id" type="keyword">Lemma</span> <a name="sn_step"><span class="id" type="lemma">sn_step</span></a> <span class="id" type="var">t₁</span> <span class="id" type="var">t₂</span> : <a class="idref" href="sn_commute.html#SN"><span class="id" type="inductive">SN</span></a> <a class="idref" href="sn_commute.html#sn.A"><span class="id" type="variable">A</span></a> <a class="idref" href="sn_commute.html#t₁"><span class="id" type="variable">t₁</span></a> <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:x_'→'_x"><span class="id" type="notation">→</span></a> <a class="idref" href="sn_commute.html#sn.A"><span class="id" type="variable">A</span></a> <a class="idref" href="sn_commute.html#t₁"><span class="id" type="variable">t₁</span></a> <a class="idref" href="sn_commute.html#t₂"><span class="id" type="variable">t₂</span></a> <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:x_'→'_x"><span class="id" type="notation">→</span></a> <a class="idref" href="sn_commute.html#SN"><span class="id" type="inductive">SN</span></a> <a class="idref" href="sn_commute.html#sn.A"><span class="id" type="variable">A</span></a> <a class="idref" href="sn_commute.html#t₂"><span class="id" type="variable">t₂</span></a>.<br/>
&nbsp;&nbsp;<span class="id" type="keyword">Proof</span>. <span class="id" type="tactic">induction</span> 1. <span class="id" type="tactic">eauto</span>. <span class="id" type="keyword">Qed</span>.<br/>
&nbsp;&nbsp;<span class="id" type="keyword">Lemma</span> <a name="sn_rtc"><span class="id" type="lemma">sn_rtc</span></a> <span class="id" type="var">t₁</span> <span class="id" type="var">t₂</span> : <a class="idref" href="sn_commute.html#SN"><span class="id" type="inductive">SN</span></a> <a class="idref" href="sn_commute.html#sn.A"><span class="id" type="variable">A</span></a> <a class="idref" href="sn_commute.html#t₁"><span class="id" type="variable">t₁</span></a> <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:x_'→'_x"><span class="id" type="notation">→</span></a> <a class="idref" href="sn_commute.html#sn.A"><span class="id" type="variable">A</span></a><a class="idref" href="sn_commute.html#::x_'*'"><span class="id" type="notation">*</span></a> <a class="idref" href="sn_commute.html#t₁"><span class="id" type="variable">t₁</span></a> <a class="idref" href="sn_commute.html#t₂"><span class="id" type="variable">t₂</span></a> <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:x_'→'_x"><span class="id" type="notation">→</span></a> <a class="idref" href="sn_commute.html#SN"><span class="id" type="inductive">SN</span></a> <a class="idref" href="sn_commute.html#sn.A"><span class="id" type="variable">A</span></a> <a class="idref" href="sn_commute.html#t₂"><span class="id" type="variable">t₂</span></a>.<br/>
&nbsp;&nbsp;<span class="id" type="keyword">Proof</span>. <span class="id" type="tactic">induction</span> 2; <span class="id" type="tactic">eauto</span> <span class="id" type="keyword">using</span> <a class="idref" href="sn_commute.html#sn_step"><span class="id" type="lemma">sn_step</span></a> <span class="id" type="keyword">with</span> <span class="id" type="var">trs</span>. <span class="id" type="keyword">Qed</span>.<br/>
<span class="id" type="keyword">End</span> <a class="idref" href="sn_commute.html#sn"><span class="id" type="section">sn</span></a>.<br/>
<span class="id" type="keyword">Hint</span> <span class="id" type="keyword">Resolve</span> <a class="idref" href="sn_commute.html#sn_step"><span class="id" type="lemma">sn_step</span></a> <a class="idref" href="sn_commute.html#sn_rtc"><span class="id" type="lemma">sn_rtc</span></a> : <span class="id" type="var">trs</span>.<br/>

<br/>
<span class="id" type="keyword">Inductive</span> <a name="union"><span class="id" type="inductive">union</span></a> `(<span class="id" type="var">A</span> : <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Relations.Relation_Definitions.html#relation"><span class="id" type="definition">relation</span></a> <span class="id" type="var">T</span>) (<span class="id" type="var">B</span> : <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Relations.Relation_Definitions.html#relation"><span class="id" type="definition">relation</span></a> <a class="idref" href="sn_commute.html#T"><span class="id" type="variable">T</span></a>) : <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Relations.Relation_Definitions.html#relation"><span class="id" type="definition">relation</span></a> <span class="id" type="var">T</span> := <br/>
&nbsp;&nbsp;| <a name="union_right"><span class="id" type="constructor">union_right</span></a> <span class="id" type="var">t₁</span> <span class="id" type="var">t₂</span> : <span class="id" type="var">A</span> <a class="idref" href="sn_commute.html#t₁"><span class="id" type="variable">t₁</span></a> <a class="idref" href="sn_commute.html#t₂"><span class="id" type="variable">t₂</span></a> <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:x_'→'_x"><span class="id" type="notation">→</span></a> (<span class="id" type="var">A</span><a class="idref" href="sn_commute.html#::x_'∪'_x"><span class="id" type="notation">∪</span></a><span class="id" type="var">B</span>) <a class="idref" href="sn_commute.html#t₁"><span class="id" type="variable">t₁</span></a> <a class="idref" href="sn_commute.html#t₂"><span class="id" type="variable">t₂</span></a><br/>
&nbsp;&nbsp;| <a name="union_left"><span class="id" type="constructor">union_left</span></a> <span class="id" type="var">t₁</span> <span class="id" type="var">t₂</span> : <span class="id" type="var">B</span> <a class="idref" href="sn_commute.html#t₁"><span class="id" type="variable">t₁</span></a> <a class="idref" href="sn_commute.html#t₂"><span class="id" type="variable">t₂</span></a> <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:x_'→'_x"><span class="id" type="notation">→</span></a> (<span class="id" type="var">A</span><a class="idref" href="sn_commute.html#::x_'∪'_x"><span class="id" type="notation">∪</span></a><span class="id" type="var">B</span>) <a class="idref" href="sn_commute.html#t₁"><span class="id" type="variable">t₁</span></a> <a class="idref" href="sn_commute.html#t₂"><span class="id" type="variable">t₂</span></a><br/>
<span class="id" type="var">where </span><a name="::x_'∪'_x"><span class="id" type="notation">"</span></a>A ∪ B" := (@<a class="idref" href="sn_commute.html#union"><span class="id" type="inductive">union</span></a> <span class="id" type="var">_</span> <span class="id" type="var">A</span> <span class="id" type="var">B</span>).<br/>
<span class="id" type="keyword">Hint</span> <span class="id" type="var">Constructors</span> <span class="id" type="var">union</span> : <span class="id" type="var">trs</span>.<br/>

<br/>
<span class="id" type="keyword">Section</span> <a name="sn_commute"><span class="id" type="section">sn_commute</span></a>.<br/>
&nbsp;&nbsp;<span class="id" type="keyword">Context</span> `(<span class="id" type="var">A</span> : <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Relations.Relation_Definitions.html#relation"><span class="id" type="definition">relation</span></a> <span class="id" type="var">T</span>) (<span class="id" type="var">B</span> : <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Relations.Relation_Definitions.html#relation"><span class="id" type="definition">relation</span></a> <a class="idref" href="sn_commute.html#T"><span class="id" type="variable">T</span></a>) (<span class="id" type="var">sn_B</span> : <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:'∀'_x_'..'_x_','_x"><span class="id" type="notation">∀</span></a> <span class="id" type="var">t</span><a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:'∀'_x_'..'_x_','_x"><span class="id" type="notation">,</span></a> <a class="idref" href="sn_commute.html#SN"><span class="id" type="inductive">SN</span></a> <a class="idref" href="sn_commute.html#B"><span class="id" type="variable">B</span></a> <a class="idref" href="sn_commute.html#t"><span class="id" type="variable">t</span></a>).<br/>
&nbsp;&nbsp;<span class="id" type="keyword">Context</span> (<span class="id" type="var">commute</span> : <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:'∀'_x_'..'_x_','_x"><span class="id" type="notation">∀</span></a> <span class="id" type="var">t₁</span> <span class="id" type="var">t₂</span> <span class="id" type="var">t₃</span><a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:'∀'_x_'..'_x_','_x"><span class="id" type="notation">,</span></a> <a class="idref" href="sn_commute.html#sn_commute.B"><span class="id" type="variable">B</span></a> <a class="idref" href="sn_commute.html#t₁"><span class="id" type="variable">t₁</span></a> <a class="idref" href="sn_commute.html#t₂"><span class="id" type="variable">t₂</span></a> <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:x_'→'_x"><span class="id" type="notation">→</span></a> <a class="idref" href="sn_commute.html#sn_commute.A"><span class="id" type="variable">A</span></a> <a class="idref" href="sn_commute.html#t₂"><span class="id" type="variable">t₂</span></a> <a class="idref" href="sn_commute.html#t₃"><span class="id" type="variable">t₃</span></a> <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:x_'→'_x"><span class="id" type="notation">→</span></a> <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:'∃'_x_'..'_x_','_x"><span class="id" type="notation">∃</span></a> <span class="id" type="var">t₄</span><a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:'∃'_x_'..'_x_','_x"><span class="id" type="notation">,</span></a> <a class="idref" href="sn_commute.html#sn_commute.A"><span class="id" type="variable">A</span></a> <a class="idref" href="sn_commute.html#t₁"><span class="id" type="variable">t₁</span></a> <a class="idref" href="sn_commute.html#t₄"><span class="id" type="variable">t₄</span></a> <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:x_'∧'_x"><span class="id" type="notation">∧</span></a> <a class="idref" href="sn_commute.html#::x_'*'"><span class="id" type="notation">(</span></a><a class="idref" href="sn_commute.html#sn_commute.A"><span class="id" type="variable">A</span></a><a class="idref" href="sn_commute.html#::x_'∪'_x"><span class="id" type="notation">∪</span></a><a class="idref" href="sn_commute.html#sn_commute.B"><span class="id" type="variable">B</span></a><a class="idref" href="sn_commute.html#::x_'*'"><span class="id" type="notation">)*</span></a> <a class="idref" href="sn_commute.html#t₄"><span class="id" type="variable">t₄</span></a> <a class="idref" href="sn_commute.html#t₃"><span class="id" type="variable">t₃</span></a>).<br/>

<br/>
&nbsp;&nbsp;<span class="id" type="keyword">Lemma</span> <a name="sn_make_union"><span class="id" type="lemma">sn_make_union</span></a> <span class="id" type="var">t₁</span> : <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:x_'→'_x"><span class="id" type="notation">(</span></a><a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:'∀'_x_'..'_x_','_x"><span class="id" type="notation">∀</span></a> <span class="id" type="var">t₂</span> <span class="id" type="var">t₃</span><a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:'∀'_x_'..'_x_','_x"><span class="id" type="notation">,</span></a> <a class="idref" href="sn_commute.html#sn_commute.B"><span class="id" type="variable">B</span></a><a class="idref" href="sn_commute.html#::x_'*'"><span class="id" type="notation">*</span></a> <a class="idref" href="sn_commute.html#t₁"><span class="id" type="variable">t₁</span></a> <a class="idref" href="sn_commute.html#t₂"><span class="id" type="variable">t₂</span></a> <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:x_'→'_x"><span class="id" type="notation">→</span></a> <a class="idref" href="sn_commute.html#sn_commute.A"><span class="id" type="variable">A</span></a> <a class="idref" href="sn_commute.html#t₂"><span class="id" type="variable">t₂</span></a> <a class="idref" href="sn_commute.html#t₃"><span class="id" type="variable">t₃</span></a> <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:x_'→'_x"><span class="id" type="notation">→</span></a> <a class="idref" href="sn_commute.html#SN"><span class="id" type="inductive">SN</span></a> (<a class="idref" href="sn_commute.html#sn_commute.A"><span class="id" type="variable">A</span></a><a class="idref" href="sn_commute.html#::x_'∪'_x"><span class="id" type="notation">∪</span></a><a class="idref" href="sn_commute.html#sn_commute.B"><span class="id" type="variable">B</span></a>) <a class="idref" href="sn_commute.html#t₃"><span class="id" type="variable">t₃</span></a><a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:x_'→'_x"><span class="id" type="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:x_'→'_x"><span class="id" type="notation">→</span></a> <a class="idref" href="sn_commute.html#SN"><span class="id" type="inductive">SN</span></a> (<a class="idref" href="sn_commute.html#sn_commute.A"><span class="id" type="variable">A</span></a><a class="idref" href="sn_commute.html#::x_'∪'_x"><span class="id" type="notation">∪</span></a><a class="idref" href="sn_commute.html#sn_commute.B"><span class="id" type="variable">B</span></a>) <a class="idref" href="sn_commute.html#t₁"><span class="id" type="variable">t₁</span></a>.<br/>
&nbsp;&nbsp;<span class="id" type="keyword">Proof</span>.<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="id" type="tactic">intros</span> <span class="id" type="var">Hsn</span>. <span class="id" type="tactic">induction</span> (<a class="idref" href="sn_commute.html#sn_commute.sn_B"><span class="id" type="variable">sn_B</span></a> <span class="id" type="var">t₁</span>) <span class="id" type="keyword">as</span> [<span class="id" type="var">t₁</span> <span class="id" type="var">_</span> <span class="id" type="var">IH</span>].<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="id" type="tactic">apply</span> <a class="idref" href="sn_commute.html#sn_make"><span class="id" type="constructor">sn_make</span></a>. <span class="id" type="tactic">intros</span> <span class="id" type="var">t₂</span> <span class="id" type="var">Ht₁t₂</span>. <span class="id" type="tactic">destruct</span> <span class="id" type="var">Ht₁t₂</span>; <span class="id" type="tactic">eauto</span> <span class="id" type="keyword">with</span> <span class="id" type="var">trs</span>.<br/>
&nbsp;&nbsp;<span class="id" type="keyword">Qed</span>.<br/>

<br/>
&nbsp;&nbsp;<span class="id" type="keyword">Lemma</span> <a name="commute_trc"><span class="id" type="lemma">commute_trc</span></a> <span class="id" type="var">t₁</span> <span class="id" type="var">t₂</span> <span class="id" type="var">t₃</span> : <a class="idref" href="sn_commute.html#sn_commute.B"><span class="id" type="variable">B</span></a><a class="idref" href="sn_commute.html#::x_'*'"><span class="id" type="notation">*</span></a> <a class="idref" href="sn_commute.html#t₁"><span class="id" type="variable">t₁</span></a> <a class="idref" href="sn_commute.html#t₂"><span class="id" type="variable">t₂</span></a> <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:x_'→'_x"><span class="id" type="notation">→</span></a> <a class="idref" href="sn_commute.html#sn_commute.A"><span class="id" type="variable">A</span></a> <a class="idref" href="sn_commute.html#t₂"><span class="id" type="variable">t₂</span></a> <a class="idref" href="sn_commute.html#t₃"><span class="id" type="variable">t₃</span></a> <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:x_'→'_x"><span class="id" type="notation">→</span></a> <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:'∃'_x_'..'_x_','_x"><span class="id" type="notation">∃</span></a> <span class="id" type="var">t₄</span><a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:'∃'_x_'..'_x_','_x"><span class="id" type="notation">,</span></a> <a class="idref" href="sn_commute.html#sn_commute.A"><span class="id" type="variable">A</span></a> <a class="idref" href="sn_commute.html#t₁"><span class="id" type="variable">t₁</span></a> <a class="idref" href="sn_commute.html#t₄"><span class="id" type="variable">t₄</span></a> <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:x_'∧'_x"><span class="id" type="notation">∧</span></a> <a class="idref" href="sn_commute.html#::x_'*'"><span class="id" type="notation">(</span></a><a class="idref" href="sn_commute.html#sn_commute.A"><span class="id" type="variable">A</span></a><a class="idref" href="sn_commute.html#::x_'∪'_x"><span class="id" type="notation">∪</span></a><a class="idref" href="sn_commute.html#sn_commute.B"><span class="id" type="variable">B</span></a><a class="idref" href="sn_commute.html#::x_'*'"><span class="id" type="notation">)*</span></a> <a class="idref" href="sn_commute.html#t₄"><span class="id" type="variable">t₄</span></a> <a class="idref" href="sn_commute.html#t₃"><span class="id" type="variable">t₃</span></a>.<br/>
&nbsp;&nbsp;<span class="id" type="keyword">Proof</span>.<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="id" type="tactic">intros</span> <span class="id" type="var">Ht₁t₂</span> <span class="id" type="var">Ht₂t₃</span>. <span class="id" type="tactic">induction</span> <span class="id" type="var">Ht₁t₂</span> <span class="id" type="keyword">as</span> [|<span class="id" type="var">t₁</span> <span class="id" type="var">t₂</span> <span class="id" type="var">t₂'</span> <span class="id" type="var">Ht₁t₂</span> <span class="id" type="var">Ht₂t₂'</span> <span class="id" type="var">IH</span>].<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="id" type="tactic">eauto</span> <span class="id" type="keyword">with</span> <span class="id" type="var">trs</span>.<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="id" type="tactic">destruct</span> (<span class="id" type="var">IH</span> <span class="id" type="var">Ht₂t₃</span>) <span class="id" type="keyword">as</span> [<span class="id" type="var">t₄</span> [<span class="id" type="var">Ht₂t₄</span> <span class="id" type="var">Ht₄t₃</span>]].<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="id" type="tactic">destruct</span> (<a class="idref" href="sn_commute.html#sn_commute.commute"><span class="id" type="variable">commute</span></a> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">Ht₁t₂</span> <span class="id" type="var">Ht₂t₄</span>) <span class="id" type="keyword">as</span> [<span class="id" type="var">t₁'</span> [<span class="id" type="var">Ht₁t₁'</span> <span class="id" type="var">Ht₁'t₄</span>]].<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="id" type="tactic">eauto</span> <span class="id" type="keyword">with</span> <span class="id" type="var">trs</span>.<br/>
&nbsp;&nbsp;<span class="id" type="keyword">Qed</span>.<br/>

<br/>
&nbsp;&nbsp;<span class="id" type="keyword">Lemma</span> <a name="commute_sn"><span class="id" type="lemma">commute_sn</span></a> <span class="id" type="var">t</span> : <a class="idref" href="sn_commute.html#SN"><span class="id" type="inductive">SN</span></a> <a class="idref" href="sn_commute.html#sn_commute.A"><span class="id" type="variable">A</span></a> <a class="idref" href="sn_commute.html#t"><span class="id" type="variable">t</span></a> <a class="idref" href="http://coq.inria.fr/distrib/trunk/stdlib/Coq.Unicode.Utf8_core.html#:type_scope:x_'→'_x"><span class="id" type="notation">→</span></a> <a class="idref" href="sn_commute.html#SN"><span class="id" type="inductive">SN</span></a> (<a class="idref" href="sn_commute.html#sn_commute.A"><span class="id" type="variable">A</span></a><a class="idref" href="sn_commute.html#::x_'∪'_x"><span class="id" type="notation">∪</span></a><a class="idref" href="sn_commute.html#sn_commute.B"><span class="id" type="variable">B</span></a>) <a class="idref" href="sn_commute.html#t"><span class="id" type="variable">t</span></a>.<br/>
&nbsp;&nbsp;<span class="id" type="keyword">Proof</span>.<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="id" type="tactic">induction</span> 1. <span class="id" type="tactic">apply</span> <a class="idref" href="sn_commute.html#sn_make_union"><span class="id" type="lemma">sn_make_union</span></a>; <span class="id" type="tactic">auto</span>. <span class="id" type="tactic">intros</span>.<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="id" type="var">edestruct</span> <a class="idref" href="sn_commute.html#commute_trc"><span class="id" type="lemma">commute_trc</span></a> <span class="id" type="keyword">as</span> [?[??]]; <span class="id" type="tactic">eauto</span> <span class="id" type="keyword">with</span> <span class="id" type="var">trs</span>.<br/>
&nbsp;&nbsp;<span class="id" type="keyword">Qed</span>.<br/>
<span class="id" type="keyword">End</span> <a class="idref" href="sn_commute.html#sn_commute"><span class="id" type="section">sn_commute</span></a>.<br/>
</div>
</div>

<div id="footer">
<hr/><a href="index.html">Index</a><hr/>This page has been generated by <a href="http://coq.inria.fr/">coqdoc</a>
</div>

</div>

</body>
</html>