src/HOL/Tools/Sledgehammer/MaSh/src/predefined.py
author blanchet
Thu, 27 Dec 2012 10:01:40 +0100
changeset 50619 b958a94cf811
parent 50388 a5b666e0c3c2
child 53100 1133b9e83f09
permissions -rw-r--r--
new version of MaSh, with theory-level reasoning
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
50222
40e3c3be6bca added file headers
blanchet
parents: 50220
diff changeset
     1
#     Title:      HOL/Tools/Sledgehammer/MaSh/src/predefined.py
40e3c3be6bca added file headers
blanchet
parents: 50220
diff changeset
     2
#     Author:     Daniel Kuehlwein, ICIS, Radboud University Nijmegen
40e3c3be6bca added file headers
blanchet
parents: 50220
diff changeset
     3
#     Copyright   2012
40e3c3be6bca added file headers
blanchet
parents: 50220
diff changeset
     4
#
40e3c3be6bca added file headers
blanchet
parents: 50220
diff changeset
     5
# A classifier that uses the Meng-Paulson predictions.
40e3c3be6bca added file headers
blanchet
parents: 50220
diff changeset
     6
50220
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
     7
'''
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
     8
Created on Jul 11, 2012
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
     9
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    10
@author: Daniel Kuehlwein
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    11
'''
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    12
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    13
from cPickle import dump,load
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    14
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    15
class Predefined(object):
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    16
    '''
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    17
    A classifier that uses the Meng-Paulson predictions.
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    18
    Only used to easily compare statistics between the old Sledgehammer algorithm and the new machine learning ones.
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    19
    '''
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    20
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    21
    def __init__(self,mpPredictionFile):
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    22
        '''
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    23
        Constructor
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    24
        '''
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    25
        self.predictionFile = mpPredictionFile
50388
a5b666e0c3c2 added weights to MaSh (by Daniel Kuehlwein)
blanchet
parents: 50222
diff changeset
    26
50220
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    27
    def initializeModel(self,_trainData,dicts):
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    28
        """
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    29
        Load predictions.
50388
a5b666e0c3c2 added weights to MaSh (by Daniel Kuehlwein)
blanchet
parents: 50222
diff changeset
    30
        """
50220
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    31
        self.predictions = {}
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    32
        IS = open(self.predictionFile,'r')
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    33
        for line in IS:
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    34
            line = line.split(':')
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    35
            name = line[0].strip()
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    36
            predId = dicts.get_name_id(name)
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    37
            line = line[1].split()
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    38
            preds = [dicts.get_name_id(x.strip())for x in line]
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    39
            self.predictions[predId] = preds
50619
b958a94cf811 new version of MaSh, with theory-level reasoning
blanchet
parents: 50388
diff changeset
    40
        IS.close()        
50388
a5b666e0c3c2 added weights to MaSh (by Daniel Kuehlwein)
blanchet
parents: 50222
diff changeset
    41
50220
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    42
    def update(self,dataPoint,features,dependencies):
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    43
        """
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    44
        Updates the Model.
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    45
        """
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    46
        # No Update needed since we assume that we got all predictions
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    47
        pass
50388
a5b666e0c3c2 added weights to MaSh (by Daniel Kuehlwein)
blanchet
parents: 50222
diff changeset
    48
a5b666e0c3c2 added weights to MaSh (by Daniel Kuehlwein)
blanchet
parents: 50222
diff changeset
    49
50220
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    50
    def predict(self,problemId):
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    51
        """
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    52
        Return the saved predictions.
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    53
        """
50388
a5b666e0c3c2 added weights to MaSh (by Daniel Kuehlwein)
blanchet
parents: 50222
diff changeset
    54
        return self.predictions[problemId]
a5b666e0c3c2 added weights to MaSh (by Daniel Kuehlwein)
blanchet
parents: 50222
diff changeset
    55
50220
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    56
    def save(self,fileName):
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    57
        OStream = open(fileName, 'wb')
50388
a5b666e0c3c2 added weights to MaSh (by Daniel Kuehlwein)
blanchet
parents: 50222
diff changeset
    58
        dump((self.predictionFile,self.predictions),OStream)
50220
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    59
        OStream.close()
50388
a5b666e0c3c2 added weights to MaSh (by Daniel Kuehlwein)
blanchet
parents: 50222
diff changeset
    60
50220
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    61
    def load(self,fileName):
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    62
        OStream = open(fileName, 'rb')
50388
a5b666e0c3c2 added weights to MaSh (by Daniel Kuehlwein)
blanchet
parents: 50222
diff changeset
    63
        self.predictionFile,self.predictions = load(OStream)
50220
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    64
        OStream.close()