-
Notifications
You must be signed in to change notification settings - Fork 1
/
Abstract-DPO.html
50 lines (50 loc) · 50.9 KB
/
Abstract-DPO.html
1
2
3
4
5
6
7
8
9
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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Abstract.DPO</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
window.onload = function () {pageLoad();setSynopsis("mini_Abstract-DPO.html");};
//]]>
</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="src/Abstract.DPO.html">Source</a></li><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">verigraph-1.1.1: Software specification and verification tool based on graph rewriting.</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Safe Haskell</th><td>Safe</td></tr><tr><th>Language</th><td>Haskell2010</td></tr></table><p class="caption">Abstract.DPO</p></div><div id="table-of-contents"><p class="caption">Contents</p><ul><li><a href="#g:1">Application</a><ul><li><a href="#g:2">Conditions</a></li><li><a href="#g:3">Transformation</a></li></ul></li><li><a href="#g:4">Manipulation</a></li></ul></div><div id="description"><p class="caption">Description</p><div class="doc"><p>Provides definitions for the Double-Pushout approach to
High-Level Rewriting Systems.</p></div></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><span class="keyword">data</span> <a href="#t:Production">Production</a> m</li><li class="src short"><a href="#v:buildProduction">buildProduction</a> :: m -> m -> [m] -> <a href="Abstract-DPO.html#t:Production">Production</a> m</li><li class="src short"><a href="#v:getLHS">getLHS</a> :: <a href="Abstract-DPO.html#t:Production">Production</a> m -> m</li><li class="src short"><a href="#v:getRHS">getRHS</a> :: <a href="Abstract-DPO.html#t:Production">Production</a> m -> m</li><li class="src short"><a href="#v:getNACs">getNACs</a> :: <a href="Abstract-DPO.html#t:Production">Production</a> m -> [m]</li><li class="src short"><span class="keyword">data</span> <a href="#t:Derivation">Derivation</a> m = <a href="#v:Derivation">Derivation</a> {<ul class="subs"><li><a href="#v:production">production</a> :: <a href="Abstract-DPO.html#t:Production">Production</a> m</li><li><a href="#v:match">match</a> :: m</li><li><a href="#v:comatch">comatch</a> :: m</li><li><a href="#v:gluing">gluing</a> :: m</li><li><a href="#v:dToG">dToG</a> :: m</li><li><a href="#v:dToH">dToH</a> :: m</li></ul>}</li><li class="src short"><a href="#v:generateDerivation">generateDerivation</a> :: <a href="Abstract-DPO.html#t:DPO">DPO</a> m => <a href="Abstract-DPO.html#t:MorphismsConfig">MorphismsConfig</a> -> m -> <a href="Abstract-DPO.html#t:Production">Production</a> m -> <a href="../base-4.9.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="Abstract-DPO.html#t:Derivation">Derivation</a> m)</li><li class="src short"><span class="keyword">data</span> <a href="#t:Process">Process</a> m = <a href="#v:Process">Process</a> {<ul class="subs"><li><a href="#v:productions">productions</a> :: [<a href="Abstract-DPO.html#t:Production">Production</a> m]</li><li><a href="#v:coreObject">coreObject</a> :: <a href="Abstract-Morphism.html#t:Obj">Obj</a> m</li></ul>}</li><li class="src short"><span class="keyword">class</span> <a href="Abstract-DPO.html#t:DPO">DPO</a> m => <a href="#t:GenerateProcess">GenerateProcess</a> m <span class="keyword">where</span><ul class="subs"></ul></li><li class="src short"><span class="keyword">data</span> <a href="#t:MorphismsConfig">MorphismsConfig</a> = <a href="#v:MorphismsConfig">MorphismsConfig</a> {<ul class="subs"><li><a href="#v:matchRestriction">matchRestriction</a> :: <a href="Abstract-DPO.html#t:MatchRestriction">MatchRestriction</a></li><li><a href="#v:nacSatisfaction">nacSatisfaction</a> :: <a href="Abstract-DPO.html#t:NacSatisfaction">NacSatisfaction</a></li></ul>}</li><li class="src short"><span class="keyword">data</span> <a href="#t:MatchRestriction">MatchRestriction</a><ul class="subs"><li>= <a href="#v:MonoMatches">MonoMatches</a></li><li>| <a href="#v:AnyMatches">AnyMatches</a></li></ul></li><li class="src short"><a href="#v:matchRestrictionToMorphismType">matchRestrictionToMorphismType</a> :: <a href="Abstract-DPO.html#t:MatchRestriction">MatchRestriction</a> -> <a href="Abstract-Morphism.html#t:MorphismType">MorphismType</a></li><li class="src short"><span class="keyword">data</span> <a href="#t:NacSatisfaction">NacSatisfaction</a><ul class="subs"><li>= <a href="#v:MonomorphicNAC">MonomorphicNAC</a></li><li>| <a href="#v:PartiallyMonomorphicNAC">PartiallyMonomorphicNAC</a></li></ul></li><li class="src short"><span class="keyword">class</span> (<a href="Abstract-AdhesiveHLR.html#t:AdhesiveHLR">AdhesiveHLR</a> m, <a href="Abstract-Morphism.html#t:FindMorphism">FindMorphism</a> m) => <a href="#t:DPO">DPO</a> m <span class="keyword">where</span><ul class="subs"></ul></li><li class="src short"><a href="#v:satisfiesGluingConditions">satisfiesGluingConditions</a> :: <a href="Abstract-DPO.html#t:DPO">DPO</a> m => <a href="Abstract-DPO.html#t:MorphismsConfig">MorphismsConfig</a> -> <a href="Abstract-DPO.html#t:Production">Production</a> m -> m -> <a href="../base-4.9.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:satisfiesNACs">satisfiesNACs</a> :: <a href="Abstract-DPO.html#t:DPO">DPO</a> m => <a href="Abstract-DPO.html#t:MorphismsConfig">MorphismsConfig</a> -> <a href="Abstract-DPO.html#t:Production">Production</a> m -> m -> <a href="../base-4.9.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:satisfiesRewritingConditions">satisfiesRewritingConditions</a> :: <a href="Abstract-DPO.html#t:DPO">DPO</a> m => <a href="Abstract-DPO.html#t:MorphismsConfig">MorphismsConfig</a> -> <a href="Abstract-DPO.html#t:Production">Production</a> m -> m -> <a href="../base-4.9.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:satisfyRewritingConditions">satisfyRewritingConditions</a> :: <a href="Abstract-DPO.html#t:DPO">DPO</a> m => <a href="Abstract-DPO.html#t:MorphismsConfig">MorphismsConfig</a> -> (<a href="Abstract-DPO.html#t:Production">Production</a> m, m) -> (<a href="Abstract-DPO.html#t:Production">Production</a> m, m) -> <a href="../base-4.9.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:findAllMatches">findAllMatches</a> :: <a href="Abstract-DPO.html#t:DPO">DPO</a> m => <a href="Abstract-DPO.html#t:MorphismsConfig">MorphismsConfig</a> -> <a href="Abstract-DPO.html#t:Production">Production</a> m -> <a href="Abstract-Morphism.html#t:Obj">Obj</a> m -> [m]</li><li class="src short"><a href="#v:findApplicableMatches">findApplicableMatches</a> :: <a href="Abstract-DPO.html#t:DPO">DPO</a> m => <a href="Abstract-DPO.html#t:MorphismsConfig">MorphismsConfig</a> -> <a href="Abstract-DPO.html#t:Production">Production</a> m -> <a href="Abstract-Morphism.html#t:Obj">Obj</a> m -> [m]</li><li class="src short"><a href="#v:calculateDPO">calculateDPO</a> :: <a href="Abstract-AdhesiveHLR.html#t:AdhesiveHLR">AdhesiveHLR</a> m => m -> <a href="Abstract-DPO.html#t:Production">Production</a> m -> (m, m, m, m)</li><li class="src short"><a href="#v:calculateComatch">calculateComatch</a> :: <a href="Abstract-AdhesiveHLR.html#t:AdhesiveHLR">AdhesiveHLR</a> m => m -> <a href="Abstract-DPO.html#t:Production">Production</a> m -> m</li><li class="src short"><a href="#v:rewrite">rewrite</a> :: <a href="Abstract-AdhesiveHLR.html#t:AdhesiveHLR">AdhesiveHLR</a> m => m -> <a href="Abstract-DPO.html#t:Production">Production</a> m -> <a href="Abstract-Morphism.html#t:Obj">Obj</a> m</li><li class="src short"><a href="#v:invertProductionWithoutNacs">invertProductionWithoutNacs</a> :: <a href="Abstract-DPO.html#t:Production">Production</a> m -> <a href="Abstract-DPO.html#t:Production">Production</a> m</li><li class="src short"><a href="#v:nacDownwardShift">nacDownwardShift</a> :: <a href="Abstract-AdhesiveHLR.html#t:EpiPairs">EpiPairs</a> m => <a href="Abstract-DPO.html#t:MorphismsConfig">MorphismsConfig</a> -> m -> m -> [m]</li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><span class="keyword">data</span> <a id="t:Production" class="def">Production</a> m <a href="src/Abstract.DPO.Core.html#Production" class="link">Source</a> <a href="#t:Production" class="selflink">#</a></p><div class="doc"><p>A Double-Pushout production.</p><p>Consists of two morphisms <em><code>left</code> : K -> L</em> and <em><code>right</code> : K -> R</em>,
as well as a set of <code>nacs</code> <em>L -> Ni</em>.</p></div><div class="subs instances"><p id="control.i:Production" class="caption collapser" onclick="toggleSection('i:Production')">Instances</p><div id="section.i:Production" class="show"><table><tr><td class="src clearfix"><span class="inst-left"><span id="control.i:id:Production:Eq:1" class="instance expander" onclick="toggleSection('i:id:Production:Eq:1')"></span> <a href="../base-4.9.1.0/Data-Eq.html#t:Eq">Eq</a> m => <a href="../base-4.9.1.0/Data-Eq.html#t:Eq">Eq</a> (<a href="Abstract-DPO.html#t:Production">Production</a> m)</span> <a href="src/Abstract.DPO.Core.html#line-20" class="link">Source</a> <a href="#t:Production" class="selflink">#</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div id="section.i:id:Production:Eq:1" class="inst-details hide"><div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:-61--61-">(==)</a> :: <a href="Abstract-DPO.html#t:Production">Production</a> m -> <a href="Abstract-DPO.html#t:Production">Production</a> m -> <a href="../base-4.9.1.0/Data-Bool.html#t:Bool">Bool</a> <a href="#v:-61--61-" class="selflink">#</a></p><p class="src"><a href="#v:-47--61-">(/=)</a> :: <a href="Abstract-DPO.html#t:Production">Production</a> m -> <a href="Abstract-DPO.html#t:Production">Production</a> m -> <a href="../base-4.9.1.0/Data-Bool.html#t:Bool">Bool</a> <a href="#v:-47--61-" class="selflink">#</a></p></div></div></td></tr><tr><td class="src clearfix"><span class="inst-left"><span id="control.i:id:Production:Read:2" class="instance expander" onclick="toggleSection('i:id:Production:Read:2')"></span> <a href="../base-4.9.1.0/Text-Read.html#t:Read">Read</a> m => <a href="../base-4.9.1.0/Text-Read.html#t:Read">Read</a> (<a href="Abstract-DPO.html#t:Production">Production</a> m)</span> <a href="src/Abstract.DPO.Core.html#line-20" class="link">Source</a> <a href="#t:Production" class="selflink">#</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div id="section.i:id:Production:Read:2" class="inst-details hide"><div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:readsPrec">readsPrec</a> :: <a href="../base-4.9.1.0/Data-Int.html#t:Int">Int</a> -> <a href="../base-4.9.1.0/Text-ParserCombinators-ReadP.html#t:ReadS">ReadS</a> (<a href="Abstract-DPO.html#t:Production">Production</a> m) <a href="#v:readsPrec" class="selflink">#</a></p><p class="src"><a href="#v:readList">readList</a> :: <a href="../base-4.9.1.0/Text-ParserCombinators-ReadP.html#t:ReadS">ReadS</a> [<a href="Abstract-DPO.html#t:Production">Production</a> m] <a href="#v:readList" class="selflink">#</a></p><p class="src"><a href="#v:readPrec">readPrec</a> :: <a href="../base-4.9.1.0/Text-ParserCombinators-ReadPrec.html#t:ReadPrec">ReadPrec</a> (<a href="Abstract-DPO.html#t:Production">Production</a> m) <a href="#v:readPrec" class="selflink">#</a></p><p class="src"><a href="#v:readListPrec">readListPrec</a> :: <a href="../base-4.9.1.0/Text-ParserCombinators-ReadPrec.html#t:ReadPrec">ReadPrec</a> [<a href="Abstract-DPO.html#t:Production">Production</a> m] <a href="#v:readListPrec" class="selflink">#</a></p></div></div></td></tr><tr><td class="src clearfix"><span class="inst-left"><span id="control.i:id:Production:Show:3" class="instance expander" onclick="toggleSection('i:id:Production:Show:3')"></span> <a href="../base-4.9.1.0/Text-Show.html#t:Show">Show</a> m => <a href="../base-4.9.1.0/Text-Show.html#t:Show">Show</a> (<a href="Abstract-DPO.html#t:Production">Production</a> m)</span> <a href="src/Abstract.DPO.Core.html#line-20" class="link">Source</a> <a href="#t:Production" class="selflink">#</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div id="section.i:id:Production:Show:3" class="inst-details hide"><div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:showsPrec">showsPrec</a> :: <a href="../base-4.9.1.0/Data-Int.html#t:Int">Int</a> -> <a href="Abstract-DPO.html#t:Production">Production</a> m -> <a href="../base-4.9.1.0/Text-Show.html#t:ShowS">ShowS</a> <a href="#v:showsPrec" class="selflink">#</a></p><p class="src"><a href="#v:show">show</a> :: <a href="Abstract-DPO.html#t:Production">Production</a> m -> <a href="../base-4.9.1.0/Data-String.html#t:String">String</a> <a href="#v:show" class="selflink">#</a></p><p class="src"><a href="#v:showList">showList</a> :: [<a href="Abstract-DPO.html#t:Production">Production</a> m] -> <a href="../base-4.9.1.0/Text-Show.html#t:ShowS">ShowS</a> <a href="#v:showList" class="selflink">#</a></p></div></div></td></tr><tr><td class="src clearfix"><span class="inst-left"><span id="control.i:id:Production:Valid:4" class="instance expander" onclick="toggleSection('i:id:Production:Valid:4')"></span> (<a href="Abstract-Morphism.html#t:Morphism">Morphism</a> m, <a href="Abstract-Valid.html#t:Valid">Valid</a> m, <a href="../base-4.9.1.0/Data-Eq.html#t:Eq">Eq</a> (<a href="Abstract-Morphism.html#t:Obj">Obj</a> m)) => <a href="Abstract-Valid.html#t:Valid">Valid</a> (<a href="Abstract-DPO.html#t:Production">Production</a> m)</span> <a href="src/Abstract.DPO.Core.html#line-41" class="link">Source</a> <a href="#t:Production" class="selflink">#</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div id="section.i:id:Production:Valid:4" class="inst-details hide"><div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:isValid">isValid</a> :: <a href="Abstract-DPO.html#t:Production">Production</a> m -> <a href="../base-4.9.1.0/Data-Bool.html#t:Bool">Bool</a> <a href="src/Abstract.Valid.html#isValid" class="link">Source</a> <a href="#v:isValid" class="selflink">#</a></p><p class="src"><a href="#v:validate">validate</a> :: <a href="Abstract-DPO.html#t:Production">Production</a> m -> <a href="Abstract-Valid.html#t:ValidationResult">ValidationResult</a> <a href="src/Abstract.Valid.html#validate" class="link">Source</a> <a href="#v:validate" class="selflink">#</a></p></div></div></td></tr></table></div></div></div><div class="top"><p class="src"><a id="v:buildProduction" class="def">buildProduction</a> :: m -> m -> [m] -> <a href="Abstract-DPO.html#t:Production">Production</a> m <a href="src/Abstract.DPO.Core.html#buildProduction" class="link">Source</a> <a href="#v:buildProduction" class="selflink">#</a></p><div class="doc"><p>Construct a production from the morphism <em>l : K -> L</em>,
the morphism <em>r : K -> R</em>, and the nacs <em>L -> Ni</em>, respectively.</p><p>Note: this doesn't check that the production is valid.</p></div></div><div class="top"><p class="src"><a id="v:getLHS" class="def">getLHS</a> :: <a href="Abstract-DPO.html#t:Production">Production</a> m -> m <a href="src/Abstract.DPO.Core.html#getLHS" class="link">Source</a> <a href="#v:getLHS" class="selflink">#</a></p><div class="doc"><p>Returns the morphism <em>K -> L</em> of the given production</p></div></div><div class="top"><p class="src"><a id="v:getRHS" class="def">getRHS</a> :: <a href="Abstract-DPO.html#t:Production">Production</a> m -> m <a href="src/Abstract.DPO.Core.html#getRHS" class="link">Source</a> <a href="#v:getRHS" class="selflink">#</a></p><div class="doc"><p>Returns the morphism <em>K -> R</em> of the given production</p></div></div><div class="top"><p class="src"><a id="v:getNACs" class="def">getNACs</a> :: <a href="Abstract-DPO.html#t:Production">Production</a> m -> [m] <a href="src/Abstract.DPO.Core.html#getNACs" class="link">Source</a> <a href="#v:getNACs" class="selflink">#</a></p><div class="doc"><p>Returns the set of nacs <em>L -> Ni</em> of the given production</p></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a id="t:Derivation" class="def">Derivation</a> m <a href="src/Abstract.DPO.Derivation.html#Derivation" class="link">Source</a> <a href="#t:Derivation" class="selflink">#</a></p><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a id="v:Derivation" class="def">Derivation</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><ul><li><dfn class="src"><a id="v:production" class="def">production</a> :: <a href="Abstract-DPO.html#t:Production">Production</a> m</dfn><div class="doc empty"> </div></li><li><dfn class="src"><a id="v:match" class="def">match</a> :: m</dfn><div class="doc empty"> </div></li><li><dfn class="src"><a id="v:comatch" class="def">comatch</a> :: m</dfn><div class="doc empty"> </div></li><li><dfn class="src"><a id="v:gluing" class="def">gluing</a> :: m</dfn><div class="doc empty"> </div></li><li><dfn class="src"><a id="v:dToG" class="def">dToG</a> :: m</dfn><div class="doc empty"> </div></li><li><dfn class="src"><a id="v:dToH" class="def">dToH</a> :: m</dfn><div class="doc empty"> </div></li></ul></div></td></tr></table></div><div class="subs instances"><p id="control.i:Derivation" class="caption collapser" onclick="toggleSection('i:Derivation')">Instances</p><div id="section.i:Derivation" class="show"><table><tr><td class="src clearfix"><span class="inst-left"><span id="control.i:id:Derivation:Eq:1" class="instance expander" onclick="toggleSection('i:id:Derivation:Eq:1')"></span> <a href="../base-4.9.1.0/Data-Eq.html#t:Eq">Eq</a> m => <a href="../base-4.9.1.0/Data-Eq.html#t:Eq">Eq</a> (<a href="Abstract-DPO.html#t:Derivation">Derivation</a> m)</span> <a href="src/Abstract.DPO.Derivation.html#line-22" class="link">Source</a> <a href="#t:Derivation" class="selflink">#</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div id="section.i:id:Derivation:Eq:1" class="inst-details hide"><div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:-61--61-">(==)</a> :: <a href="Abstract-DPO.html#t:Derivation">Derivation</a> m -> <a href="Abstract-DPO.html#t:Derivation">Derivation</a> m -> <a href="../base-4.9.1.0/Data-Bool.html#t:Bool">Bool</a> <a href="#v:-61--61-" class="selflink">#</a></p><p class="src"><a href="#v:-47--61-">(/=)</a> :: <a href="Abstract-DPO.html#t:Derivation">Derivation</a> m -> <a href="Abstract-DPO.html#t:Derivation">Derivation</a> m -> <a href="../base-4.9.1.0/Data-Bool.html#t:Bool">Bool</a> <a href="#v:-47--61-" class="selflink">#</a></p></div></div></td></tr><tr><td class="src clearfix"><span class="inst-left"><span id="control.i:id:Derivation:Read:2" class="instance expander" onclick="toggleSection('i:id:Derivation:Read:2')"></span> <a href="../base-4.9.1.0/Text-Read.html#t:Read">Read</a> m => <a href="../base-4.9.1.0/Text-Read.html#t:Read">Read</a> (<a href="Abstract-DPO.html#t:Derivation">Derivation</a> m)</span> <a href="src/Abstract.DPO.Derivation.html#line-22" class="link">Source</a> <a href="#t:Derivation" class="selflink">#</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div id="section.i:id:Derivation:Read:2" class="inst-details hide"><div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:readsPrec">readsPrec</a> :: <a href="../base-4.9.1.0/Data-Int.html#t:Int">Int</a> -> <a href="../base-4.9.1.0/Text-ParserCombinators-ReadP.html#t:ReadS">ReadS</a> (<a href="Abstract-DPO.html#t:Derivation">Derivation</a> m) <a href="#v:readsPrec" class="selflink">#</a></p><p class="src"><a href="#v:readList">readList</a> :: <a href="../base-4.9.1.0/Text-ParserCombinators-ReadP.html#t:ReadS">ReadS</a> [<a href="Abstract-DPO.html#t:Derivation">Derivation</a> m] <a href="#v:readList" class="selflink">#</a></p><p class="src"><a href="#v:readPrec">readPrec</a> :: <a href="../base-4.9.1.0/Text-ParserCombinators-ReadPrec.html#t:ReadPrec">ReadPrec</a> (<a href="Abstract-DPO.html#t:Derivation">Derivation</a> m) <a href="#v:readPrec" class="selflink">#</a></p><p class="src"><a href="#v:readListPrec">readListPrec</a> :: <a href="../base-4.9.1.0/Text-ParserCombinators-ReadPrec.html#t:ReadPrec">ReadPrec</a> [<a href="Abstract-DPO.html#t:Derivation">Derivation</a> m] <a href="#v:readListPrec" class="selflink">#</a></p></div></div></td></tr><tr><td class="src clearfix"><span class="inst-left"><span id="control.i:id:Derivation:Show:3" class="instance expander" onclick="toggleSection('i:id:Derivation:Show:3')"></span> <a href="../base-4.9.1.0/Text-Show.html#t:Show">Show</a> m => <a href="../base-4.9.1.0/Text-Show.html#t:Show">Show</a> (<a href="Abstract-DPO.html#t:Derivation">Derivation</a> m)</span> <a href="src/Abstract.DPO.Derivation.html#line-22" class="link">Source</a> <a href="#t:Derivation" class="selflink">#</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div id="section.i:id:Derivation:Show:3" class="inst-details hide"><div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:showsPrec">showsPrec</a> :: <a href="../base-4.9.1.0/Data-Int.html#t:Int">Int</a> -> <a href="Abstract-DPO.html#t:Derivation">Derivation</a> m -> <a href="../base-4.9.1.0/Text-Show.html#t:ShowS">ShowS</a> <a href="#v:showsPrec" class="selflink">#</a></p><p class="src"><a href="#v:show">show</a> :: <a href="Abstract-DPO.html#t:Derivation">Derivation</a> m -> <a href="../base-4.9.1.0/Data-String.html#t:String">String</a> <a href="#v:show" class="selflink">#</a></p><p class="src"><a href="#v:showList">showList</a> :: [<a href="Abstract-DPO.html#t:Derivation">Derivation</a> m] -> <a href="../base-4.9.1.0/Text-Show.html#t:ShowS">ShowS</a> <a href="#v:showList" class="selflink">#</a></p></div></div></td></tr></table></div></div></div><div class="top"><p class="src"><a id="v:generateDerivation" class="def">generateDerivation</a> :: <a href="Abstract-DPO.html#t:DPO">DPO</a> m => <a href="Abstract-DPO.html#t:MorphismsConfig">MorphismsConfig</a> -> m -> <a href="Abstract-DPO.html#t:Production">Production</a> m -> <a href="../base-4.9.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="Abstract-DPO.html#t:Derivation">Derivation</a> m) <a href="src/Abstract.DPO.Derivation.html#generateDerivation" class="link">Source</a> <a href="#v:generateDerivation" class="selflink">#</a></p><div class="doc"><p>Given a match <code>m</code> and a production <code>p</code>, it returns <code>Just d</code>, where <code>d</code> is the corresponding Derivation if <code>m</code> satisfies the rewriting conditions, or <code>Nothing</code>.</p></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a id="t:Process" class="def">Process</a> m <a href="src/Abstract.DPO.Process.html#Process" class="link">Source</a> <a href="#t:Process" class="selflink">#</a></p><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a id="v:Process" class="def">Process</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><ul><li><dfn class="src"><a id="v:productions" class="def">productions</a> :: [<a href="Abstract-DPO.html#t:Production">Production</a> m]</dfn><div class="doc empty"> </div></li><li><dfn class="src"><a id="v:coreObject" class="def">coreObject</a> :: <a href="Abstract-Morphism.html#t:Obj">Obj</a> m</dfn><div class="doc empty"> </div></li></ul></div></td></tr></table></div><div class="subs instances"><p id="control.i:Process" class="caption collapser" onclick="toggleSection('i:Process')">Instances</p><div id="section.i:Process" class="show"><table><tr><td class="src clearfix"><span class="inst-left"><span id="control.i:id:Process:Eq:1" class="instance expander" onclick="toggleSection('i:id:Process:Eq:1')"></span> (<a href="../base-4.9.1.0/Data-Eq.html#t:Eq">Eq</a> m, <a href="../base-4.9.1.0/Data-Eq.html#t:Eq">Eq</a> (<a href="Abstract-Morphism.html#t:Obj">Obj</a> m)) => <a href="../base-4.9.1.0/Data-Eq.html#t:Eq">Eq</a> (<a href="Abstract-DPO.html#t:Process">Process</a> m)</span> <a href="src/Abstract.DPO.Process.html#line-28" class="link">Source</a> <a href="#t:Process" class="selflink">#</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div id="section.i:id:Process:Eq:1" class="inst-details hide"><div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:-61--61-">(==)</a> :: <a href="Abstract-DPO.html#t:Process">Process</a> m -> <a href="Abstract-DPO.html#t:Process">Process</a> m -> <a href="../base-4.9.1.0/Data-Bool.html#t:Bool">Bool</a> <a href="#v:-61--61-" class="selflink">#</a></p><p class="src"><a href="#v:-47--61-">(/=)</a> :: <a href="Abstract-DPO.html#t:Process">Process</a> m -> <a href="Abstract-DPO.html#t:Process">Process</a> m -> <a href="../base-4.9.1.0/Data-Bool.html#t:Bool">Bool</a> <a href="#v:-47--61-" class="selflink">#</a></p></div></div></td></tr><tr><td class="src clearfix"><span class="inst-left"><span id="control.i:id:Process:Show:2" class="instance expander" onclick="toggleSection('i:id:Process:Show:2')"></span> (<a href="../base-4.9.1.0/Text-Show.html#t:Show">Show</a> m, <a href="../base-4.9.1.0/Text-Show.html#t:Show">Show</a> (<a href="Abstract-Morphism.html#t:Obj">Obj</a> m)) => <a href="../base-4.9.1.0/Text-Show.html#t:Show">Show</a> (<a href="Abstract-DPO.html#t:Process">Process</a> m)</span> <a href="src/Abstract.DPO.Process.html#line-32" class="link">Source</a> <a href="#t:Process" class="selflink">#</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div id="section.i:id:Process:Show:2" class="inst-details hide"><div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:showsPrec">showsPrec</a> :: <a href="../base-4.9.1.0/Data-Int.html#t:Int">Int</a> -> <a href="Abstract-DPO.html#t:Process">Process</a> m -> <a href="../base-4.9.1.0/Text-Show.html#t:ShowS">ShowS</a> <a href="#v:showsPrec" class="selflink">#</a></p><p class="src"><a href="#v:show">show</a> :: <a href="Abstract-DPO.html#t:Process">Process</a> m -> <a href="../base-4.9.1.0/Data-String.html#t:String">String</a> <a href="#v:show" class="selflink">#</a></p><p class="src"><a href="#v:showList">showList</a> :: [<a href="Abstract-DPO.html#t:Process">Process</a> m] -> <a href="../base-4.9.1.0/Text-Show.html#t:ShowS">ShowS</a> <a href="#v:showList" class="selflink">#</a></p></div></div></td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">class</span> <a href="Abstract-DPO.html#t:DPO">DPO</a> m => <a id="t:GenerateProcess" class="def">GenerateProcess</a> m <span class="keyword">where</span> <a href="src/Abstract.DPO.Process.html#GenerateProcess" class="link">Source</a> <a href="#t:GenerateProcess" class="selflink">#</a></p><div class="subs minimal"><p class="caption">Minimal complete definition</p><p class="src"><a href="Abstract-DPO.html#v:restrictMorphisms">restrictMorphisms</a>, <a href="Abstract-DPO.html#v:restrictMorphism">restrictMorphism</a>, <a href="Abstract-DPO.html#v:typing">typing</a>, <a href="Abstract-DPO.html#v:productionTyping">productionTyping</a></p></div><div class="subs methods"><p class="caption">Methods</p><p class="src"><a id="v:restrictMorphisms" class="def">restrictMorphisms</a> :: (m, m) -> (m, m) <a href="src/Abstract.DPO.Process.html#restrictMorphisms" class="link">Source</a> <a href="#v:restrictMorphisms" class="selflink">#</a></p><div class="doc"><p>Given a pair of morhisms with common codomain, it returns a new pair with morphism also with a
a new codomain that does not contain the elements that were orphans in both original morphisms</p></div><p class="src"><a id="v:restrictMorphism" class="def">restrictMorphism</a> :: m -> m <a href="src/Abstract.DPO.Process.html#restrictMorphism" class="link">Source</a> <a href="#v:restrictMorphism" class="selflink">#</a></p><div class="doc"><p>Given a morhism, it returns a morphism with a new codomain that is equal to the image of the original
morphism</p></div><p class="src"><a id="v:typing" class="def">typing</a> :: (<a href="Abstract-DPO.html#t:Derivation">Derivation</a> m, (m, m, m)) -> <a href="Abstract-DPO.html#t:Production">Production</a> m <a href="src/Abstract.DPO.Process.html#typing" class="link">Source</a> <a href="#v:typing" class="selflink">#</a></p><div class="doc"><p>Given a Derivation <code>d</code> and a tuple <code>(p,q,r)</code> of Morphisms <code>p : G -> C</code>, <code>q : D -> C</code> and
<code>r : H -> C</code>, it returns a new Production corresponding to the production in <code>d</code> but
typed over C</p></div><p class="src"><a id="v:productionTyping" class="def">productionTyping</a> :: (<a href="Abstract-DPO.html#t:Production">Production</a> m, (m, m, m)) -> <a href="Abstract-DPO.html#t:Production">Production</a> m <a href="src/Abstract.DPO.Process.html#productionTyping" class="link">Source</a> <a href="#v:productionTyping" class="selflink">#</a></p><div class="doc"><p>Given a Production <code>p</code> and a tuple <code>(r,s,t)</code> of Morphisms <code>r : G -> C</code>, <code>s : D -> C</code> and
<code>t : H -> C</code>, it returns a new Production corresponding to the production in <code>p</code> but
typed over C</p></div><p class="src"><a id="v:calculateProcess" class="def">calculateProcess</a> :: [<a href="Abstract-DPO.html#t:Derivation">Derivation</a> m] -> <a href="Abstract-DPO.html#t:Process">Process</a> m <a href="src/Abstract.DPO.Process.html#calculateProcess" class="link">Source</a> <a href="#v:calculateProcess" class="selflink">#</a></p><div class="doc"><p>Given a list of Derivation containing a sequential derivation, returns its corresponding Process</p></div><p class="src"><a id="v:calculateRulesColimit" class="def">calculateRulesColimit</a> :: <a href="Grammar-Core.html#t:RuleSequence">RuleSequence</a> m -> [<a href="Abstract-DPO-Process.html#t:NamedRuleWithMatches">NamedRuleWithMatches</a> m] <a href="src/Abstract.DPO.Process.html#calculateRulesColimit" class="link">Source</a> <a href="#v:calculateRulesColimit" class="selflink">#</a></p><p class="src"><a id="v:generateGraphProcess" class="def">generateGraphProcess</a> :: <a href="Grammar-Core.html#t:RuleSequence">RuleSequence</a> m -> [(<a href="../base-4.9.1.0/Data-String.html#t:String">String</a>, <a href="Abstract-DPO.html#t:Production">Production</a> m)] <a href="src/Abstract.DPO.Process.html#generateGraphProcess" class="link">Source</a> <a href="#v:generateGraphProcess" class="selflink">#</a></p></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a id="t:MorphismsConfig" class="def">MorphismsConfig</a> <a href="src/Abstract.AdhesiveHLR.html#MorphismsConfig" class="link">Source</a> <a href="#t:MorphismsConfig" class="selflink">#</a></p><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a id="v:MorphismsConfig" class="def">MorphismsConfig</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><ul><li><dfn class="src"><a id="v:matchRestriction" class="def">matchRestriction</a> :: <a href="Abstract-DPO.html#t:MatchRestriction">MatchRestriction</a></dfn><div class="doc empty"> </div></li><li><dfn class="src"><a id="v:nacSatisfaction" class="def">nacSatisfaction</a> :: <a href="Abstract-DPO.html#t:NacSatisfaction">NacSatisfaction</a></dfn><div class="doc empty"> </div></li></ul></div></td></tr></table></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a id="t:MatchRestriction" class="def">MatchRestriction</a> <a href="src/Abstract.AdhesiveHLR.html#MatchRestriction" class="link">Source</a> <a href="#t:MatchRestriction" class="selflink">#</a></p><div class="doc"><p>Flag indicating what restrictions are required or assumed of matches.</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a id="v:MonoMatches" class="def">MonoMatches</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a id="v:AnyMatches" class="def">AnyMatches</a></td><td class="doc empty"> </td></tr></table></div><div class="subs instances"><p id="control.i:MatchRestriction" class="caption collapser" onclick="toggleSection('i:MatchRestriction')">Instances</p><div id="section.i:MatchRestriction" class="show"><table><tr><td class="src clearfix"><span class="inst-left"><span id="control.i:id:MatchRestriction:Eq:1" class="instance expander" onclick="toggleSection('i:id:MatchRestriction:Eq:1')"></span> <a href="../base-4.9.1.0/Data-Eq.html#t:Eq">Eq</a> <a href="Abstract-DPO.html#t:MatchRestriction">MatchRestriction</a></span> <a href="src/Abstract.AdhesiveHLR.html#line-170" class="link">Source</a> <a href="#t:MatchRestriction" class="selflink">#</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div id="section.i:id:MatchRestriction:Eq:1" class="inst-details hide"><div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:-61--61-">(==)</a> :: <a href="Abstract-DPO.html#t:MatchRestriction">MatchRestriction</a> -> <a href="Abstract-DPO.html#t:MatchRestriction">MatchRestriction</a> -> <a href="../base-4.9.1.0/Data-Bool.html#t:Bool">Bool</a> <a href="#v:-61--61-" class="selflink">#</a></p><p class="src"><a href="#v:-47--61-">(/=)</a> :: <a href="Abstract-DPO.html#t:MatchRestriction">MatchRestriction</a> -> <a href="Abstract-DPO.html#t:MatchRestriction">MatchRestriction</a> -> <a href="../base-4.9.1.0/Data-Bool.html#t:Bool">Bool</a> <a href="#v:-47--61-" class="selflink">#</a></p></div></div></td></tr><tr><td class="src clearfix"><span class="inst-left"><span id="control.i:id:MatchRestriction:Show:2" class="instance expander" onclick="toggleSection('i:id:MatchRestriction:Show:2')"></span> <a href="../base-4.9.1.0/Text-Show.html#t:Show">Show</a> <a href="Abstract-DPO.html#t:MatchRestriction">MatchRestriction</a></span> <a href="src/Abstract.AdhesiveHLR.html#line-170" class="link">Source</a> <a href="#t:MatchRestriction" class="selflink">#</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div id="section.i:id:MatchRestriction:Show:2" class="inst-details hide"><div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:showsPrec">showsPrec</a> :: <a href="../base-4.9.1.0/Data-Int.html#t:Int">Int</a> -> <a href="Abstract-DPO.html#t:MatchRestriction">MatchRestriction</a> -> <a href="../base-4.9.1.0/Text-Show.html#t:ShowS">ShowS</a> <a href="#v:showsPrec" class="selflink">#</a></p><p class="src"><a href="#v:show">show</a> :: <a href="Abstract-DPO.html#t:MatchRestriction">MatchRestriction</a> -> <a href="../base-4.9.1.0/Data-String.html#t:String">String</a> <a href="#v:show" class="selflink">#</a></p><p class="src"><a href="#v:showList">showList</a> :: [<a href="Abstract-DPO.html#t:MatchRestriction">MatchRestriction</a>] -> <a href="../base-4.9.1.0/Text-Show.html#t:ShowS">ShowS</a> <a href="#v:showList" class="selflink">#</a></p></div></div></td></tr></table></div></div></div><div class="top"><p class="src"><a id="v:matchRestrictionToMorphismType" class="def">matchRestrictionToMorphismType</a> :: <a href="Abstract-DPO.html#t:MatchRestriction">MatchRestriction</a> -> <a href="Abstract-Morphism.html#t:MorphismType">MorphismType</a> <a href="src/Abstract.AdhesiveHLR.html#matchRestrictionToMorphismType" class="link">Source</a> <a href="#v:matchRestrictionToMorphismType" class="selflink">#</a></p><div class="doc"><p>Converts a match restriction to the corresponding MorphismType</p></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a id="t:NacSatisfaction" class="def">NacSatisfaction</a> <a href="src/Abstract.AdhesiveHLR.html#NacSatisfaction" class="link">Source</a> <a href="#t:NacSatisfaction" class="selflink">#</a></p><div class="doc"><p>Flag indicating the semantics of NAC satisfaction.</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a id="v:MonomorphicNAC" class="def">MonomorphicNAC</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a id="v:PartiallyMonomorphicNAC" class="def">PartiallyMonomorphicNAC</a></td><td class="doc empty"> </td></tr></table></div><div class="subs instances"><p id="control.i:NacSatisfaction" class="caption collapser" onclick="toggleSection('i:NacSatisfaction')">Instances</p><div id="section.i:NacSatisfaction" class="show"><table><tr><td class="src clearfix"><span class="inst-left"><span id="control.i:id:NacSatisfaction:Eq:1" class="instance expander" onclick="toggleSection('i:id:NacSatisfaction:Eq:1')"></span> <a href="../base-4.9.1.0/Data-Eq.html#t:Eq">Eq</a> <a href="Abstract-DPO.html#t:NacSatisfaction">NacSatisfaction</a></span> <a href="src/Abstract.AdhesiveHLR.html#line-178" class="link">Source</a> <a href="#t:NacSatisfaction" class="selflink">#</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div id="section.i:id:NacSatisfaction:Eq:1" class="inst-details hide"><div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:-61--61-">(==)</a> :: <a href="Abstract-DPO.html#t:NacSatisfaction">NacSatisfaction</a> -> <a href="Abstract-DPO.html#t:NacSatisfaction">NacSatisfaction</a> -> <a href="../base-4.9.1.0/Data-Bool.html#t:Bool">Bool</a> <a href="#v:-61--61-" class="selflink">#</a></p><p class="src"><a href="#v:-47--61-">(/=)</a> :: <a href="Abstract-DPO.html#t:NacSatisfaction">NacSatisfaction</a> -> <a href="Abstract-DPO.html#t:NacSatisfaction">NacSatisfaction</a> -> <a href="../base-4.9.1.0/Data-Bool.html#t:Bool">Bool</a> <a href="#v:-47--61-" class="selflink">#</a></p></div></div></td></tr><tr><td class="src clearfix"><span class="inst-left"><span id="control.i:id:NacSatisfaction:Show:2" class="instance expander" onclick="toggleSection('i:id:NacSatisfaction:Show:2')"></span> <a href="../base-4.9.1.0/Text-Show.html#t:Show">Show</a> <a href="Abstract-DPO.html#t:NacSatisfaction">NacSatisfaction</a></span> <a href="src/Abstract.AdhesiveHLR.html#line-178" class="link">Source</a> <a href="#t:NacSatisfaction" class="selflink">#</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div id="section.i:id:NacSatisfaction:Show:2" class="inst-details hide"><div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:showsPrec">showsPrec</a> :: <a href="../base-4.9.1.0/Data-Int.html#t:Int">Int</a> -> <a href="Abstract-DPO.html#t:NacSatisfaction">NacSatisfaction</a> -> <a href="../base-4.9.1.0/Text-Show.html#t:ShowS">ShowS</a> <a href="#v:showsPrec" class="selflink">#</a></p><p class="src"><a href="#v:show">show</a> :: <a href="Abstract-DPO.html#t:NacSatisfaction">NacSatisfaction</a> -> <a href="../base-4.9.1.0/Data-String.html#t:String">String</a> <a href="#v:show" class="selflink">#</a></p><p class="src"><a href="#v:showList">showList</a> :: [<a href="Abstract-DPO.html#t:NacSatisfaction">NacSatisfaction</a>] -> <a href="../base-4.9.1.0/Text-Show.html#t:ShowS">ShowS</a> <a href="#v:showList" class="selflink">#</a></p></div></div></td></tr></table></div></div></div><h2 id="g:1">Application</h2><h3 id="g:2">Conditions</h3><div class="doc"><p>In order to apply a production with a particular match, some application
conditions must be satisfied: the gluing condition and the negative
application conditions (NACs). This section provides functions that test
if such conditions are met.</p></div><div class="top"><p class="src"><span class="keyword">class</span> (<a href="Abstract-AdhesiveHLR.html#t:AdhesiveHLR">AdhesiveHLR</a> m, <a href="Abstract-Morphism.html#t:FindMorphism">FindMorphism</a> m) => <a id="t:DPO" class="def">DPO</a> m <span class="keyword">where</span> <a href="src/Abstract.DPO.Core.html#DPO" class="link">Source</a> <a href="#t:DPO" class="selflink">#</a></p><div class="doc"><p>Class for morphisms whose category is Adhesive-HLR, and which can be
used for double-pushout transformations.</p></div><div class="subs minimal"><p class="caption">Minimal complete definition</p><p class="src"><a href="Abstract-DPO.html#v:invertProduction">invertProduction</a>, <a href="Abstract-DPO.html#v:shiftNacOverProduction">shiftNacOverProduction</a>, <a href="Abstract-DPO.html#v:isPartiallyMonomorphic">isPartiallyMonomorphic</a></p></div><div class="subs methods"><p class="caption">Methods</p><p class="src"><a id="v:invertProduction" class="def">invertProduction</a> :: <a href="Abstract-DPO.html#t:MorphismsConfig">MorphismsConfig</a> -> <a href="Abstract-DPO.html#t:Production">Production</a> m -> <a href="Abstract-DPO.html#t:Production">Production</a> m <a href="src/Abstract.DPO.Core.html#invertProduction" class="link">Source</a> <a href="#v:invertProduction" class="selflink">#</a></p><div class="doc"><p>Inverts a production, adjusting the NACs accordingly.
Needs information of nac injective satisfaction (in second order)
and matches injective.</p></div><p class="src"><a id="v:shiftNacOverProduction" class="def">shiftNacOverProduction</a> :: <a href="Abstract-DPO.html#t:MorphismsConfig">MorphismsConfig</a> -> <a href="Abstract-DPO.html#t:Production">Production</a> m -> m -> [m] <a href="src/Abstract.DPO.Core.html#shiftNacOverProduction" class="link">Source</a> <a href="#v:shiftNacOverProduction" class="selflink">#</a></p><div class="doc"><p>Given a production <em>L ←l- K -r→ R</em> and a NAC morphism <em>n : L -> N</em>, obtain
a set of NACs <em>n'i : R -> N'i</em> that is equivalent to the original NAC.</p></div><p class="src"><a id="v:isPartiallyMonomorphic" class="def">isPartiallyMonomorphic</a> :: m -> m -> <a href="../base-4.9.1.0/Data-Bool.html#t:Bool">Bool</a> <a href="src/Abstract.DPO.Core.html#isPartiallyMonomorphic" class="link">Source</a> <a href="#v:isPartiallyMonomorphic" class="selflink">#</a></p><div class="doc"><p>Check if the second morphism is monomorphic outside the image of the
first morphism.</p></div></div></div><div class="top"><p class="src"><a id="v:satisfiesGluingConditions" class="def">satisfiesGluingConditions</a> :: <a href="Abstract-DPO.html#t:DPO">DPO</a> m => <a href="Abstract-DPO.html#t:MorphismsConfig">MorphismsConfig</a> -> <a href="Abstract-DPO.html#t:Production">Production</a> m -> m -> <a href="../base-4.9.1.0/Data-Bool.html#t:Bool">Bool</a> <a href="src/Abstract.DPO.Core.html#satisfiesGluingConditions" class="link">Source</a> <a href="#v:satisfiesGluingConditions" class="selflink">#</a></p><div class="doc"><p>Verifies if the gluing conditions for a production <em>p</em> are satisfied by a match <em>m</em></p></div></div><div class="top"><p class="src"><a id="v:satisfiesNACs" class="def">satisfiesNACs</a> :: <a href="Abstract-DPO.html#t:DPO">DPO</a> m => <a href="Abstract-DPO.html#t:MorphismsConfig">MorphismsConfig</a> -> <a href="Abstract-DPO.html#t:Production">Production</a> m -> m -> <a href="../base-4.9.1.0/Data-Bool.html#t:Bool">Bool</a> <a href="src/Abstract.DPO.Core.html#satisfiesNACs" class="link">Source</a> <a href="#v:satisfiesNACs" class="selflink">#</a></p><div class="doc"><p>True if the given match satisfies all NACs of the given production.</p></div></div><div class="top"><p class="src"><a id="v:satisfiesRewritingConditions" class="def">satisfiesRewritingConditions</a> :: <a href="Abstract-DPO.html#t:DPO">DPO</a> m => <a href="Abstract-DPO.html#t:MorphismsConfig">MorphismsConfig</a> -> <a href="Abstract-DPO.html#t:Production">Production</a> m -> m -> <a href="../base-4.9.1.0/Data-Bool.html#t:Bool">Bool</a> <a href="src/Abstract.DPO.Core.html#satisfiesRewritingConditions" class="link">Source</a> <a href="#v:satisfiesRewritingConditions" class="selflink">#</a></p><div class="doc"><p>True if the given match satisfies the gluing condition and NACs of the
given production.</p></div></div><div class="top"><p class="src"><a id="v:satisfyRewritingConditions" class="def">satisfyRewritingConditions</a> :: <a href="Abstract-DPO.html#t:DPO">DPO</a> m => <a href="Abstract-DPO.html#t:MorphismsConfig">MorphismsConfig</a> -> (<a href="Abstract-DPO.html#t:Production">Production</a> m, m) -> (<a href="Abstract-DPO.html#t:Production">Production</a> m, m) -> <a href="../base-4.9.1.0/Data-Bool.html#t:Bool">Bool</a> <a href="src/Abstract.DPO.html#satisfyRewritingConditions" class="link">Source</a> <a href="#v:satisfyRewritingConditions" class="selflink">#</a></p><div class="doc"><p>Check gluing conditions and the NACs satisfaction for a pair of matches
<code>inj</code> only indicates if the match is injective, this function does not checks it</p></div></div><h3 id="g:3">Transformation</h3><div class="doc"><p>Given a production and a match for its left side, it may be possible
to apply the production and obtain a transformation of the matched graph.
This section provides functions that calculate such transformations.</p></div><div class="top"><p class="src"><a id="v:findAllMatches" class="def">findAllMatches</a> :: <a href="Abstract-DPO.html#t:DPO">DPO</a> m => <a href="Abstract-DPO.html#t:MorphismsConfig">MorphismsConfig</a> -> <a href="Abstract-DPO.html#t:Production">Production</a> m -> <a href="Abstract-Morphism.html#t:Obj">Obj</a> m -> [m] <a href="src/Abstract.DPO.Core.html#findAllMatches" class="link">Source</a> <a href="#v:findAllMatches" class="selflink">#</a></p><div class="doc"><p>Obtain all matches from the production into the given object, even if they
aren't applicable.</p><p>When given <code><a href="Abstract-DPO.html#v:MonoMatches">MonoMatches</a></code>, only obtains monomorphic matches.</p></div></div><div class="top"><p class="src"><a id="v:findApplicableMatches" class="def">findApplicableMatches</a> :: <a href="Abstract-DPO.html#t:DPO">DPO</a> m => <a href="Abstract-DPO.html#t:MorphismsConfig">MorphismsConfig</a> -> <a href="Abstract-DPO.html#t:Production">Production</a> m -> <a href="Abstract-Morphism.html#t:Obj">Obj</a> m -> [m] <a href="src/Abstract.DPO.Core.html#findApplicableMatches" class="link">Source</a> <a href="#v:findApplicableMatches" class="selflink">#</a></p><div class="doc"><p>Obtain the matches from the production into the given object that satisfiy the NACs
and gluing conditions.</p><p>When given <code><a href="Abstract-DPO.html#v:MonoMatches">MonoMatches</a></code>, only obtains monomorphic matches.</p></div></div><div class="top"><p class="src"><a id="v:calculateDPO" class="def">calculateDPO</a> :: <a href="Abstract-AdhesiveHLR.html#t:AdhesiveHLR">AdhesiveHLR</a> m => m -> <a href="Abstract-DPO.html#t:Production">Production</a> m -> (m, m, m, m) <a href="src/Abstract.DPO.Core.html#calculateDPO" class="link">Source</a> <a href="#v:calculateDPO" class="selflink">#</a></p><div class="doc"><p>Given a match and a production, calculates the double-pushout diagram
for the corresponding transformation.</p><p>Given match <em>m : L -> G</em> and the production <em>L ←l- K -r→ R</em> such that
<code><code><a href="Abstract-DPO.html#v:satisfiesRewritingConditions">satisfiesRewritingConditions</a></code> _ _ p m == True</code>, returns <em>k</em>, <em>n</em>, <em>f</em> and <em>g</em> (respectively)
such that the following two squares are pushouts.</p><pre> l r
L◀──────K──────▶R
│ │ │
m │ │ k │ n
▼ ▼ ▼
G◀──────D──────▶H
f g
</pre><p>Note: this doesn't test whether the match is for the actual production,
nor if the match satisfies all application conditions.</p></div></div><div class="top"><p class="src"><a id="v:calculateComatch" class="def">calculateComatch</a> :: <a href="Abstract-AdhesiveHLR.html#t:AdhesiveHLR">AdhesiveHLR</a> m => m -> <a href="Abstract-DPO.html#t:Production">Production</a> m -> m <a href="src/Abstract.DPO.Core.html#calculateComatch" class="link">Source</a> <a href="#v:calculateComatch" class="selflink">#</a></p><div class="doc"><p>Given a match and a production, calculate the calculateComatch for the
corresponding transformation.</p><p>Given match <em>m : L -> G</em> and the production <code>p = <em>L ←l- K -r→ R</em></code> such that
<code><code><a href="Abstract-DPO.html#v:satisfiesRewritingConditions">satisfiesRewritingConditions</a></code> _ _ p m == True</code>, returns <em>n</em> such that the following two
squares are pushouts.</p><pre> l r
L◀──────K──────▶R
│ │ │
m │ │ │ n
▼ ▼ ▼
G◀──────D──────▶H
</pre><p>Note: this doesn't test whether the match is for the actual production,
nor if the match satisfies all application conditions.</p></div></div><div class="top"><p class="src"><a id="v:rewrite" class="def">rewrite</a> :: <a href="Abstract-AdhesiveHLR.html#t:AdhesiveHLR">AdhesiveHLR</a> m => m -> <a href="Abstract-DPO.html#t:Production">Production</a> m -> <a href="Abstract-Morphism.html#t:Obj">Obj</a> m <a href="src/Abstract.DPO.Core.html#rewrite" class="link">Source</a> <a href="#v:rewrite" class="selflink">#</a></p><div class="doc"><p>Given a match and a production, obtain the rewritten object.</p><p><code>rewrite match production</code> is equivalent to <code><code><a href="Abstract-Morphism.html#v:codomain">codomain</a></code> (<code><a href="Abstract-DPO.html#v:calculateComatch">calculateComatch</a></code> match production)</code></p></div></div><h2 id="g:4">Manipulation</h2><div class="top"><p class="src"><a id="v:invertProductionWithoutNacs" class="def">invertProductionWithoutNacs</a> :: <a href="Abstract-DPO.html#t:Production">Production</a> m -> <a href="Abstract-DPO.html#t:Production">Production</a> m <a href="src/Abstract.DPO.Core.html#invertProductionWithoutNacs" class="link">Source</a> <a href="#v:invertProductionWithoutNacs" class="selflink">#</a></p><div class="doc"><p>Discards the NACs of a production and inverts it.</p></div></div><div class="top"><p class="src"><a id="v:nacDownwardShift" class="def">nacDownwardShift</a> :: <a href="Abstract-AdhesiveHLR.html#t:EpiPairs">EpiPairs</a> m => <a href="Abstract-DPO.html#t:MorphismsConfig">MorphismsConfig</a> -> m -> m -> [m] <a href="src/Abstract.DPO.html#nacDownwardShift" class="link">Source</a> <a href="#v:nacDownwardShift" class="selflink">#</a></p><div class="doc"><p>Given a morphism <em>m : L -> L'</em> and a NAC <em>n : L -> N</em>, obtains
an equivalent set of NACs <em>n'i : L' -> N'i</em> that is equivalent to the
original NAC.</p></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.17.3</p></div></body></html>