## Theorem as a proposition with justification. JustifiedTheorem = element JustifiedTheorem {Proposition, Justification} Justification = ( Inference | Proof | SkippedProof ) ## By and From encode the atomic inference steps done by Mizar. Inference = ( By | From | element ErrorInf { empty } ) ## By encodes one simple justification from zero or more references. By = element By { Ref* } ## From encodes a simple justification involving Mizar schemes From = element From { Ref* } ## Proofs (of BlockThesis) encode ND reasonings consisting of many steps. Proof = element Proof {BlockThesis, Reasoning } ## Reasoning is a series of skeleton and auxiliary items (steps) ## optionally finished by reasoning per cases. Reasoning = ( ( SkeletonItem | AuxiliaryItem )*, PerCasesReasoning? ) ## Skeleton items are the steps that change the current thesis, the ## new Thesis is printed explicitly after them. SkeletonItem = ((Let|Conclusion|Assume|Given|Take|TakeAsVar), Thesis) ## Auxiliary items are items which do not change thesis. AuxiliaryItem = (JustifiedProposition|Consider|Set|Reconsider| DefFunc|DefPred)