View Javadoc

1   /********************************************************************************
2    *
3    *	Copyright (C) 2008 Fujitsu Services Ltd.
4    *
5    *	Author: Nick Battle
6    *
7    *	This file is part of VDMJ.
8    *
9    *	VDMJ is free software: you can redistribute it and/or modify
10   *	it under the terms of the GNU General Public License as published by
11   *	the Free Software Foundation, either version 3 of the License, or
12   *	(at your option) any later version.
13   *
14   *	VDMJ is distributed in the hope that it will be useful,
15   *	but WITHOUT ANY WARRANTY; without even the implied warranty of
16   *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17   *	GNU General Public License for more details.
18   *
19   *	You should have received a copy of the GNU General Public License
20   *	along with VDMJ.  If not, see <http://www.gnu.org/licenses/>.
21   *
22   ******************************************************************************/
23  
24  package org.overturetool.vdmj.pog;
25  
26  import org.overturetool.vdmj.expressions.MapEnumExpression;
27  import org.overturetool.vdmj.expressions.MapletExpression;
28  
29  public class MapSeqOfCompatibleObligation extends ProofObligation
30  {
31  	public MapSeqOfCompatibleObligation(MapEnumExpression exp, POContextStack ctxt)
32  	{
33  		super(exp.location, POType.MAP_SEQ_OF_COMPATIBLE, ctxt);
34  		StringBuilder sb = new StringBuilder();
35  
36  		String m1 = getVar("m");
37  		String m2 = getVar("m");
38  
39  		sb.append("forall " + m1 + ", " + m2 + " in set {");
40  		String prefix = "";
41  
42  		for (MapletExpression m: exp.members)
43  		{
44  			sb.append(prefix);
45  			sb.append("{");
46  			sb.append(m);
47  			sb.append("}");
48  			prefix = ", ";
49  		}
50  
51  		String d1 = getVar("d");
52  		String d2 = getVar("d");
53  
54  		sb.append("} &\n  forall " + d1 + " in set dom " + m1 + ", " + d2 + " in set dom " + m2 + " &\n");
55  		sb.append("    " + d1 + " = " + d2 + " => " + m1 + "(" + d1 + ") = " + m2 + "(" + d2 + ")");
56  
57  		value = ctxt.getObligation(sb.toString());
58  	}
59  }