X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Focaml%2Fcic_transformations%2Fcontent2pres.ml;h=65d33f9171eedc75b8e657ef39eb419e73ffb128;hb=11858f45a39c301de590043d3271d95790a52377;hp=1616c21c8273d0bf15b9fc4ba39948a3e328e8c4;hpb=60951dd6218b8436830723dc10d4aed7b6894855;p=helm.git diff --git a/helm/ocaml/cic_transformations/content2pres.ml b/helm/ocaml/cic_transformations/content2pres.ml index 1616c21c8..65d33f917 100644 --- a/helm/ocaml/cic_transformations/content2pres.ml +++ b/helm/ocaml/cic_transformations/content2pres.ml @@ -157,29 +157,34 @@ let make_concl ?(attrs=[]) verb concl = let make_args_for_apply term2pres args = let module Con = Content in let module P = Mpresentation in - let rec make_arg_for_apply is_first arg row = - (match arg with + let make_arg_for_apply is_first arg row = + let res = + match arg with Con.Aux n -> assert false | Con.Premise prem -> let name = (match prem.Con.premise_binder with None -> "previous" | Some s -> s) in - P.smallskip::P.Mi([],name)::row + P.Mi([],name)::row | Con.Lemma lemma -> - P.smallskip::P.Mi([],lemma.Con.lemma_name)::row + P.Mi([],lemma.Con.lemma_name)::row | Con.Term t -> if is_first then (term2pres t)::row - else P.smallskip::P.Mi([],"_")::row + else P.Mi([],"_")::row | Con.ArgProof _ | Con.ArgMethod _ -> - P.smallskip::P.Mi([],"_")::row) in - match args with - hd::tl -> - make_arg_for_apply true hd - (List.fold_right (make_arg_for_apply false) tl []) - | _ -> assert false;; + P.Mi([],"_")::row + in + if is_first then res else P.smallskip::res + in + match args with + hd::tl -> + make_arg_for_apply true hd + (List.fold_right (make_arg_for_apply false) tl []) + | _ -> assert false +;; let rec justification term2pres p = let module Con = Content in @@ -290,14 +295,18 @@ and proof2pres term2pres p = P.Mrow ([], [P.Mtext([None,"mathcolor","Red"],"Suppose"); P.Mspace([None,"width","0.1cm"]); - P.Mtext([],"("); + P.Mo([],"("); P.Mi ([],s); - P.Mtext([],")"); + P.Mo([],")"); P.Mspace([None,"width","0.1cm"]); ty]) | None -> prerr_endline "NO NAME!!"; assert false) - | `Proof p -> proof2pres p + | `Proof p -> + (match p.Con.proof_name with + Some "w" -> prerr_endline ("processing w"); + | _ -> ()); + proof2pres p | `Definition d -> (match d.Con.def_name with Some s -> @@ -338,7 +347,10 @@ and proof2pres term2pres p = make_concl "that is equivalent to" concl else let conclude_body = conclude_aux conclude in - let ann_concl = make_concl "we conclude" concl in + let ann_concl = + if conclude.Con.conclude_method = "TD_Conversion" then + make_concl "that is equivalent to" concl + else make_concl "we conclude" concl in P.Mtable ([None,"align","baseline 1"; None,"equalrows","false"; None,"columnalign","left"], [P.Mtr ([],[P.Mtd ([],conclude_body)]); @@ -409,6 +421,10 @@ and proof2pres term2pres p = *) else if (conclude.Con.conclude_method = "ByInduction") then byinduction conclude + else if (conclude.Con.conclude_method = "Exists") then + exists conclude + else if (conclude.Con.conclude_method = "AndInd") then + andind conclude else if (conclude.Con.conclude_method = "Rewrite") then let justif = (match (List.nth conclude.Con.conclude_args 6) with @@ -551,16 +567,7 @@ and proof2pres term2pres p = P.Mtr ([],[P.Mtd ([],induction_on)]):: P.Mtr ([],[P.Mtd ([],to_prove)]):: (make_cases args_for_cases)) -(* OLD CODE - let we_proved = - (make_concl "we proved 5" proof_conclusion) in - P.Mtable - ([None,"align","baseline 1"; None,"equalrows","false"; None,"columnalign","left"], - P.Mtr ([],[P.Mtd ([],induction_on)]):: - P.Mtr ([],[P.Mtd ([],to_prove)]):: - (make_cases args_for_cases) @ - [P.Mtr ([],[P.Mtd ([],we_proved)])]) *) - + and make_cases args_for_cases = let module P = Mpresentation in List.map @@ -624,9 +631,9 @@ and proof2pres term2pres p = None -> "no name" | Some s -> s) in P.indented (P.Mrow ([], - [P.Mtext([],"("); + [P.Mo([],"("); P.Mi ([],name); - P.Mtext([],")"); + P.Mo([],")"); P.Mspace([None,"width","0.1cm"]); term2pres h.Con.dec_type])) | _ -> assert false in @@ -646,7 +653,114 @@ and proof2pres term2pres p = None,"columnalign","left"], pattern::asubconcl::induction_hypothesis@ [P.Mtr([],[P.Mtd([],presacontext)])]) - | _ -> assert false in + | _ -> assert false + + and andind conclude = + let module P = Mpresentation in + let module Con = Content in + let proof_conclusion = + (match conclude.Con.conclude_conclusion with + None -> P.Mtext([],"No conclusion???") + | Some t -> term2pres t) in + let proof,case_arg = + (match conclude.Con.conclude_args with + [Con.Aux(n);_;Con.ArgProof proof;case_arg] -> proof,case_arg + | _ -> assert false; + (* + List.map (ContentPp.parg 0) conclude.Con.conclude_args; + assert false *)) in + let arg = + (match case_arg with + Con.Aux n -> assert false + | Con.Premise prem -> + (match prem.Con.premise_binder with + None -> [] + | Some n -> [P.Mtext([],"by");P.smallskip;P.Mi([],n)]) + | Con.Lemma lemma -> + [P.Mtext([],"by");P.smallskip;P.Mi([],lemma.Con.lemma_name)] + | _ -> assert false) in + match proof.Con.proof_context with + `Hypothesis hyp1::`Hypothesis hyp2::tl -> + let get_name hyp = + (match hyp.Con.dec_name with + None -> "_" + | Some s -> s) in + let preshyp1 = + P.Mrow ([], + [P.Mtext([],"("); + P.Mi([],get_name hyp1); + P.Mtext([],")"); + P.smallskip; + term2pres hyp1.Con.dec_type]) in + let preshyp2 = + P.Mrow ([], + [P.Mtext([],"("); + P.Mi([],get_name hyp2); + P.Mtext([],")"); + P.smallskip; + term2pres hyp2.Con.dec_type]) in + (* let body = proof2pres {proof with Con.proof_context = tl} in *) + let body = conclude2pres proof.Con.proof_conclude false true in + let presacontext = + acontext2pres proof.Con.proof_apply_context body false in + P.Mtable + ([None,"align","baseline 1"; None,"equalrows","false"; + None,"columnalign","left"], + [P.Mtr ([],[P.Mtd ([], + P.Mrow([],arg@[P.smallskip;P.Mtext([],"we have")]))]); + P.Mtr ([],[P.Mtd ([],preshyp1)]); + P.Mtr ([],[P.Mtd ([],P.Mtext([],"and"))]); + P.Mtr ([],[P.Mtd ([],preshyp2)]); + P.Mtr ([],[P.Mtd ([],presacontext)])]); + | _ -> assert false + + and exists conclude = + let module P = Mpresentation in + let module Con = Content in + let proof_conclusion = + (match conclude.Con.conclude_conclusion with + None -> P.Mtext([],"No conclusion???") + | Some t -> term2pres t) in + let proof = + (match conclude.Con.conclude_args with + [Con.Aux(n);_;Con.ArgProof proof;_] -> proof + | _ -> assert false; + (* + List.map (ContentPp.parg 0) conclude.Con.conclude_args; + assert false *)) in + match proof.Con.proof_context with + `Declaration decl::`Hypothesis hyp::tl + | `Hypothesis decl::`Hypothesis hyp::tl -> + let get_name decl = + (match decl.Con.dec_name with + None -> "_" + | Some s -> s) in + let presdecl = + P.Mrow ([], + [P.Mtext([None,"mathcolor","Red"],"let"); + P.smallskip; + P.Mi([],get_name decl); + P.Mtext([],":"); term2pres decl.Con.dec_type]) in + let suchthat = + P.Mrow ([], + [P.Mtext([None,"mathcolor","Red"],"such that"); + P.smallskip; + P.Mtext([],"("); + P.Mi([],get_name hyp); + P.Mtext([],")"); + P.smallskip; + term2pres hyp.Con.dec_type]) in + (* let body = proof2pres {proof with Con.proof_context = tl} in *) + let body = conclude2pres proof.Con.proof_conclude false true in + let presacontext = + acontext2pres proof.Con.proof_apply_context body false in + P.Mtable + ([None,"align","baseline 1"; None,"equalrows","false"; + None,"columnalign","left"], + [P.Mtr ([],[P.Mtd ([],presdecl)]); + P.Mtr ([],[P.Mtd ([],suchthat)]); + P.Mtr ([],[P.Mtd ([],presacontext)])]); + | _ -> assert false in proof2pres p ;;