proof_attempt.rb revision 353f5670601cd45216a420745dded50a73ac5616
bcb4e51a409d94ae670de96afb8483a4f7855294Stephan Boschclass ProofAttempt < ActiveRecord::Base
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch include Numbering
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch include StateUpdater
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch numbering_parent_column 'sentence_id'
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch belongs_to :theorem, foreign_key: 'sentence_id'
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch belongs_to :proof_status
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch belongs_to :prover
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch belongs_to :proof_attempt_configuration
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch has_one :axiom_selection, through: :proof_attempt_configuration
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch has_one :prover_output
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch has_one :tactic_script
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch has_many :generated_axioms, dependent: :destroy
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch has_and_belongs_to_many :used_axioms,
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch class_name: 'Axiom',
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch association_foreign_key: 'sentence_id',
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch join_table: 'used_axioms_proof_attempts'
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch has_and_belongs_to_many :used_theorems,
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch class_name: 'Theorem',
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch association_foreign_key: 'sentence_id',
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch join_table: 'used_axioms_proof_attempts'
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch attr_accessible :locid
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch attr_accessible :time_taken,
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch :number,
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch :state,
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch :state_updated_at,
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch :last_error
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch validates :state, inclusion: {in: State::STATES}
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch validates :theorem, presence: true
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch before_create :generate_locid
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch before_save :set_default_proof_status
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch after_save :update_theorem_status
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch scope :latest, order('number DESC')
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch delegate :ontology, to: :theorem
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch def self.find_with_locid(locid, _iri = nil)
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch where(locid: locid).first
6135260095e1704ed6edff9d00bdfc043c11429cTimo Sirainen end
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch def set_default_proof_status
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch self.proof_status ||= ProofStatus.find(ProofStatus::DEFAULT_OPEN_STATUS)
6135260095e1704ed6edff9d00bdfc043c11429cTimo Sirainen end
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch def generate_locid
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch self.locid =
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch "#{theorem.locid}//#{self.class.to_s.underscore.dasherize}-#{number}"
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch end
3b986520baac0b2faee1196f9122f1dbdc245434Aki Tuomi
3b986520baac0b2faee1196f9122f1dbdc245434Aki Tuomi def update_theorem_status
49fc09f995183d44e004bbc3eb9b6c6c7b6cae7fTimo Sirainen theorem.update_proof_status!
f1edf7f20661ef9627acbf4054acddcba4d2eb3fStephan Bosch end
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch
49fc09f995183d44e004bbc3eb9b6c6c7b6cae7fTimo Sirainen def associate_prover_with_ontology_version
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch ontology_version = theorem.ontology.current_version
49fc09f995183d44e004bbc3eb9b6c6c7b6cae7fTimo Sirainen unless ontology_version.provers.include?(prover)
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch ontology_version.provers << prover
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch ontology_version.save!
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch end
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch end
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch def retry_failed
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch ProofExecutionWorker.perform_async(id)
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch end
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch def proper_subset_of_axioms_selected?
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch selected = proof_attempt_configuration.axiom_selection.axioms
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch available = theorem.ontology.axioms
1b81b28b2e7856748cffd7d01052a944b6c80b23Timo Sirainen selected.any? && selected.count < available.count
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch end
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch protected
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch def prove_options_from_configuration
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch pac = proof_attempt_configuration
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch Hets::ProveOptions.new({prover: pac.prover,
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch timeout: pac.timeout})
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch end
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Boschend
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch