4.36 Particularize hypothesis

Instantiation of a universally quantified hypothesis

Syntax

  ph(v1,,vn,h)

with:

Use

This command allows the assignment of a value to variables which appear, in hypotheses, under the scope of a universal quantifier. The values v1,,vn are affected to the variables w1,,wn. If the value of one or several variables is unknown, the keyword _h can be used to signify that the variable(s) will not be instantiated. For example:

     ph(e1,ENS1,_h,(MAXINT-ff(3)), !(aa,bb,cc,dd).PP(aa,bb,cc,dd))

will generate the hypothesis corresponding to

     !cc.PP(e1,ENS1,cc,(MAXINT-ff(3)))

G being the initial goal, the goal becomes:

  P(v1,,vn) Q(v1,,vn) G

The predicates P(w1,,wn) contain the typing of v1,,vn.

The user must be aware, though, that the particularization of universally quantified hypotheses is not protected against ill-typing (see chapter 2.2 page §) nor ill-definedness (see chapter 2.3 page §). A bounded variable may be instantiated by an ill-typed or ill-defined value. Thus the user must verify the well-typing and well-definedness before using this command.

This can be checked with hindsight thanks to the mdelta tool (cf. User Manual Version 1.0.).

Example

Given the following:


 
    Hypothesis  
        ENS = {e1,e2,e3,e4,e5} &  
        tt: ENS &  
        uu: ENS &  
        zz: ENS &  
        !vv.(vv: ENS & (not(uu = vv) or not(tt = vv)) => zz = vv)  
    Goal  
        not(tt = uu)  
 


The user wishes to use the hypothesis vv.(vv ENS  (¬(uu = vv)  ¬(tt = vv)) zz = vv), by instantiating vv with the value e1.

The proof of vv ENS   (¬(uu = vv)   ¬(tt = vv)) zz = vv will, after instanciation, split itself into two parts:

If these two sub-goals are proved then the sub-goal becomes zz = e1   ¬(tt = uu).


 
PRI> ph(e1,!vv.(vv: ENS & (not(uu = vv) or not(tt = vv)) => zz = vv))  
Starting Particularize Hypothesis  
 


The predicate of instanciated typing must be proved first:


 
    Goal  
        e1: ENS  
 


The pr command allows the discharging of this sub-goal.


 
PRI> pr  
 


The following sub-goal is therefore:


 
    Goal  
        not(uu = e1) or not(tt = e1)  
 


Then the user launches the proof kernel:


 
PRI> pr  
Starting Prover Call  
 


The goal is proved. The next goal is generated in this way:


 
    Goal  
        zz = e1 => not(tt = uu))  
 


The predicate zz = e1 can be placed under hypothesis by one of the two pr or dd (see chapter 4.14 page §) commands.