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.SetCompExpression;
27  import org.overturetool.vdmj.patterns.MultipleBind;
28  import org.overturetool.vdmj.types.SetType;
29  
30  public class FiniteSetObligation extends ProofObligation
31  {
32  	public FiniteSetObligation(
33  		SetCompExpression exp, SetType settype, POContextStack ctxt)
34  	{
35  		super(exp.location, POType.FINITE_SET, ctxt);
36  		StringBuilder sb = new StringBuilder();
37  
38  		String finmap = getVar("finmap");
39  		String findex = getVar("findex");
40  
41  		sb.append("exists " + finmap + ":map nat to (");
42  		sb.append(settype.setof);
43  		sb.append(") &\n");
44  		sb.append("  forall ");
45  		String prefix = "";
46  
47  		for (MultipleBind mb: exp.bindings)
48  		{
49  			sb.append(prefix);
50  			sb.append(mb);
51  			prefix = ", ";
52  		}
53  
54  		sb.append(" &\n    ");
55  		sb.append(exp.predicate);
56  		sb.append(" => ");
57  		sb.append("exists " + findex + " in set dom " + finmap +
58  			" & " + finmap + "(" + findex + ") = ");
59  		sb.append(exp.first);
60  
61  		value = ctxt.getObligation(sb.toString());
62  	}
63  }