< Module lambda_calculus:pair.
< Prove_Constraint lambda_calculus:host:proj_is. Subgoal 1: Variables: T2 T1 Hyp : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 Hyp1 : is_e (pair T1 T2) ============================ is_e (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2)
< case Hyp1. Subgoal 1: Variables: T2 T1 Hyp : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 H1 : is_e T1 H2 : is_e T2 ============================ is_e (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2)
< search 20. Subgoal 2: Variables: T Hyp : |{e}- fst T ~~> app T (abs "A" (abs "B" (var "A"))) Hyp1 : is_e (fst T) ============================ is_e (app T (abs "A" (abs "B" (var "A"))))
< case Hyp1. Subgoal 2: Variables: T Hyp : |{e}- fst T ~~> app T (abs "A" (abs "B" (var "A"))) H1 : is_e T ============================ is_e (app T (abs "A" (abs "B" (var "A"))))
< search 10. Subgoal 3: Variables: T Hyp : |{e}- snd T ~~> app T (abs "A" (abs "B" (var "B"))) Hyp1 : is_e (snd T) ============================ is_e (app T (abs "A" (abs "B" (var "B"))))
< case Hyp1. Subgoal 3: Variables: T Hyp : |{e}- snd T ~~> app T (abs "A" (abs "B" (var "B"))) H1 : is_e T ============================ is_e (app T (abs "A" (abs "B" (var "B"))))
< search 10. Proof completed.
< Add_Proj_Rel lambda_calculus:host:is_e. Proof completed.
< Prove_Ext_Ind lambda_calculus:host:is_e. Warning: No definition of Ext Size for all relations in Ext Ind; defaulting to proving Ext Ind without Ext Size Subgoal 6: Variables: E2 E1 IH : forall E, is_e E * -> <is_e {P}> E R : is_e (pair E1 E2) @ R1 : is_e E1 * R2 : is_e E2 * ============================ <is_e {P}> (pair E1 E2)
< apply IH to R1. Subgoal 6: Variables: E2 E1 IH : forall E, is_e E * -> <is_e {P}> E R : is_e (pair E1 E2) @ R1 : is_e E1 * R2 : is_e E2 * H1 : <is_e {P}> E1 ============================ <is_e {P}> (pair E1 E2)
< apply IH to R2. Subgoal 6: Variables: E2 E1 IH : forall E, is_e E * -> <is_e {P}> E R : is_e (pair E1 E2) @ R1 : is_e E1 * R2 : is_e E2 * H1 : <is_e {P}> E1 H2 : <is_e {P}> E2 ============================ <is_e {P}> (pair E1 E2)
< search 20. Subgoal 7: Variables: E1 IH : forall E, is_e E * -> <is_e {P}> E R : is_e (fst E1) @ R1 : is_e E1 * ============================ <is_e {P}> (fst E1)
< apply IH to R1. Subgoal 7: Variables: E1 IH : forall E, is_e E * -> <is_e {P}> E R : is_e (fst E1) @ R1 : is_e E1 * H1 : <is_e {P}> E1 ============================ <is_e {P}> (fst E1)
< search 10. Subgoal 8: Variables: E1 IH : forall E, is_e E * -> <is_e {P}> E R : is_e (snd E1) @ R1 : is_e E1 * ============================ <is_e {P}> (snd E1)
< apply IH to R1. Subgoal 8: Variables: E1 IH : forall E, is_e E * -> <is_e {P}> E R : is_e (snd E1) @ R1 : is_e E1 * H1 : <is_e {P}> E1 ============================ <is_e {P}> (snd E1)
< search 10. Proof completed.
< Prove_Constraint lambda_calculus:host:proj_same. Subgoal 1: Variables: E2 T2 T1 Hyp : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 Hyp1 : |{e}- pair T1 T2 ~~> E2 ============================ app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 = E2
< case Hyp1. Subgoal 1: Variables: T2 T1 Hyp : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 ============================ app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 = app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2
< search. Subgoal 2: Variables: E2 T Hyp : |{e}- fst T ~~> app T (abs "A" (abs "B" (var "A"))) Hyp1 : |{e}- fst T ~~> E2 ============================ app T (abs "A" (abs "B" (var "A"))) = E2
< case Hyp1. Subgoal 2: Variables: T Hyp : |{e}- fst T ~~> app T (abs "A" (abs "B" (var "A"))) ============================ app T (abs "A" (abs "B" (var "A"))) = app T (abs "A" (abs "B" (var "A")))
< search. Subgoal 3: Variables: E2 T Hyp : |{e}- snd T ~~> app T (abs "A" (abs "B" (var "B"))) Hyp1 : |{e}- snd T ~~> E2 ============================ app T (abs "A" (abs "B" (var "B"))) = E2
< case Hyp1. Subgoal 3: Variables: T Hyp : |{e}- snd T ~~> app T (abs "A" (abs "B" (var "B"))) ============================ app T (abs "A" (abs "B" (var "B"))) = app T (abs "A" (abs "B" (var "B")))
< search. Proof completed.
< Prove lambda_calculus:host:subst_exists. Subgoal 6: Variables: X R E2 E1 IH : forall X R E, is_e E * -> is_string X -> is_e R -> exists S, subst X R E S IsE : is_e (pair E1 E2) @ IsX : is_string X IsR : is_e R IsE1 : is_e E1 * IsE2 : is_e E2 * ============================ exists S, subst X R (pair E1 E2) S
< apply IH to IsE1 IsX IsR. Subgoal 6: Variables: X R E2 E1 S IH : forall X R E, is_e E * -> is_string X -> is_e R -> exists S, subst X R E S IsE : is_e (pair E1 E2) @ IsX : is_string X IsR : is_e R IsE1 : is_e E1 * IsE2 : is_e E2 * H1 : subst X R E1 S ============================ exists S, subst X R (pair E1 E2) S
< apply IH to IsE2 IsX IsR. Subgoal 6: Variables: X R E2 E1 S S1 IH : forall X R E, is_e E * -> is_string X -> is_e R -> exists S, subst X R E S IsE : is_e (pair E1 E2) @ IsX : is_string X IsR : is_e R IsE1 : is_e E1 * IsE2 : is_e E2 * H1 : subst X R E1 S H2 : subst X R E2 S1 ============================ exists S, subst X R (pair E1 E2) S
< search. Subgoal 7: Variables: X R E1 IH : forall X R E, is_e E * -> is_string X -> is_e R -> exists S, subst X R E S IsE : is_e (fst E1) @ IsX : is_string X IsR : is_e R IsE1 : is_e E1 * ============================ exists S, subst X R (fst E1) S
< apply IH to IsE1 IsX IsR. Subgoal 7: Variables: X R E1 S IH : forall X R E, is_e E * -> is_string X -> is_e R -> exists S, subst X R E S IsE : is_e (fst E1) @ IsX : is_string X IsR : is_e R IsE1 : is_e E1 * H1 : subst X R E1 S ============================ exists S, subst X R (fst E1) S
< search. Subgoal 8: Variables: X R E1 IH : forall X R E, is_e E * -> is_string X -> is_e R -> exists S, subst X R E S IsE : is_e (snd E1) @ IsX : is_string X IsR : is_e R IsE1 : is_e E1 * ============================ exists S, subst X R (snd E1) S
< apply IH to IsE1 IsX IsR. Subgoal 8: Variables: X R E1 S IH : forall X R E, is_e E * -> is_string X -> is_e R -> exists S, subst X R E S IsE : is_e (snd E1) @ IsX : is_string X IsR : is_e R IsE1 : is_e E1 * H1 : subst X R E1 S ============================ exists S, subst X R (snd E1) S
< search. Proof completed.
< Prove lambda_calculus:host:subst_is. Subgoal 8: Variables: X R S2 S1 T2 T1 IH : forall X R E S, is_e E -> is_string X -> is_e R -> subst X R E S * -> is_e S IsE : is_e (pair T1 T2) IsX : is_string X IsR : is_e R S : subst X R (pair T1 T2) (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S1) S2) @ S1 : subst X R T1 S1 * S2 : subst X R T2 S2 * ============================ is_e (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S1) S2)
< case IsE. Subgoal 8: Variables: X R S2 S1 T2 T1 IH : forall X R E S, is_e E -> is_string X -> is_e R -> subst X R E S * -> is_e S IsX : is_string X IsR : is_e R S : subst X R (pair T1 T2) (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S1) S2) @ S1 : subst X R T1 S1 * S2 : subst X R T2 S2 * H1 : is_e T1 H2 : is_e T2 ============================ is_e (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S1) S2)
< apply IH to _ _ _ S1. Subgoal 8: Variables: X R S2 S1 T2 T1 IH : forall X R E S, is_e E -> is_string X -> is_e R -> subst X R E S * -> is_e S IsX : is_string X IsR : is_e R S : subst X R (pair T1 T2) (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S1) S2) @ S1 : subst X R T1 S1 * S2 : subst X R T2 S2 * H1 : is_e T1 H2 : is_e T2 H3 : is_e S1 ============================ is_e (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S1) S2)
< apply IH to _ _ _ S2. Subgoal 8: Variables: X R S2 S1 T2 T1 IH : forall X R E S, is_e E -> is_string X -> is_e R -> subst X R E S * -> is_e S IsX : is_string X IsR : is_e R S : subst X R (pair T1 T2) (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S1) S2) @ S1 : subst X R T1 S1 * S2 : subst X R T2 S2 * H1 : is_e T1 H2 : is_e T2 H3 : is_e S1 H4 : is_e S2 ============================ is_e (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S1) S2)
< search 20. Subgoal 9: Variables: X R S1 T IH : forall X R E S, is_e E -> is_string X -> is_e R -> subst X R E S * -> is_e S IsE : is_e (fst T) IsX : is_string X IsR : is_e R S : subst X R (fst T) (app S1 (abs "A" (abs "B" (var "A")))) @ S1 : subst X R T S1 * ============================ is_e (app S1 (abs "A" (abs "B" (var "A"))))
< case IsE. Subgoal 9: Variables: X R S1 T IH : forall X R E S, is_e E -> is_string X -> is_e R -> subst X R E S * -> is_e S IsX : is_string X IsR : is_e R S : subst X R (fst T) (app S1 (abs "A" (abs "B" (var "A")))) @ S1 : subst X R T S1 * H1 : is_e T ============================ is_e (app S1 (abs "A" (abs "B" (var "A"))))
< apply IH to _ _ _ S1. Subgoal 9: Variables: X R S1 T IH : forall X R E S, is_e E -> is_string X -> is_e R -> subst X R E S * -> is_e S IsX : is_string X IsR : is_e R S : subst X R (fst T) (app S1 (abs "A" (abs "B" (var "A")))) @ S1 : subst X R T S1 * H1 : is_e T H2 : is_e S1 ============================ is_e (app S1 (abs "A" (abs "B" (var "A"))))
< search 10. Subgoal 10: Variables: X R S1 T IH : forall X R E S, is_e E -> is_string X -> is_e R -> subst X R E S * -> is_e S IsE : is_e (snd T) IsX : is_string X IsR : is_e R S : subst X R (snd T) (app S1 (abs "A" (abs "B" (var "B")))) @ S1 : subst X R T S1 * ============================ is_e (app S1 (abs "A" (abs "B" (var "B"))))
< case IsE. Subgoal 10: Variables: X R S1 T IH : forall X R E S, is_e E -> is_string X -> is_e R -> subst X R E S * -> is_e S IsX : is_string X IsR : is_e R S : subst X R (snd T) (app S1 (abs "A" (abs "B" (var "B")))) @ S1 : subst X R T S1 * H1 : is_e T ============================ is_e (app S1 (abs "A" (abs "B" (var "B"))))
< apply IH to _ _ _ S1. Subgoal 10: Variables: X R S1 T IH : forall X R E S, is_e E -> is_string X -> is_e R -> subst X R E S * -> is_e S IsX : is_string X IsR : is_e R S : subst X R (snd T) (app S1 (abs "A" (abs "B" (var "B")))) @ S1 : subst X R T S1 * H1 : is_e T H2 : is_e S1 ============================ is_e (app S1 (abs "A" (abs "B" (var "B"))))
< search 10. Proof completed.
< Prove lambda_calculus:host:eval_is. Subgoal 5: Variables: V T2 T1 IH : forall E V, is_e E -> eval E V * -> is_e V IsE : is_e (pair T1 T2) Ev : eval (pair T1 T2) V @ Ev1 : eval (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) V * ============================ is_e V
< case IsE. Subgoal 5: Variables: V T2 T1 IH : forall E V, is_e E -> eval E V * -> is_e V Ev : eval (pair T1 T2) V @ Ev1 : eval (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) V * H1 : is_e T1 H2 : is_e T2 ============================ is_e V
< apply IH to _ Ev1. Subgoal 5.1: Variables: V T2 T1 IH : forall E V, is_e E -> eval E V * -> is_e V Ev : eval (pair T1 T2) V @ Ev1 : eval (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) V * H1 : is_e T1 H2 : is_e T2 ============================ is_e (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2)
< search 20. Subgoal 5: Variables: V T2 T1 IH : forall E V, is_e E -> eval E V * -> is_e V Ev : eval (pair T1 T2) V @ Ev1 : eval (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) V * H1 : is_e T1 H2 : is_e T2 H3 : is_e V ============================ is_e V
< search. Subgoal 6: Variables: V T IH : forall E V, is_e E -> eval E V * -> is_e V IsE : is_e (fst T) Ev : eval (fst T) V @ Ev1 : eval (app T (abs "A" (abs "B" (var "A")))) V * ============================ is_e V
< case IsE. Subgoal 6: Variables: V T IH : forall E V, is_e E -> eval E V * -> is_e V Ev : eval (fst T) V @ Ev1 : eval (app T (abs "A" (abs "B" (var "A")))) V * H1 : is_e T ============================ is_e V
< apply IH to _ Ev1. Subgoal 6.1: Variables: V T IH : forall E V, is_e E -> eval E V * -> is_e V Ev : eval (fst T) V @ Ev1 : eval (app T (abs "A" (abs "B" (var "A")))) V * H1 : is_e T ============================ is_e (app T (abs "A" (abs "B" (var "A"))))
< search 10. Subgoal 6: Variables: V T IH : forall E V, is_e E -> eval E V * -> is_e V Ev : eval (fst T) V @ Ev1 : eval (app T (abs "A" (abs "B" (var "A")))) V * H1 : is_e T H2 : is_e V ============================ is_e V
< search. Subgoal 7: Variables: V T IH : forall E V, is_e E -> eval E V * -> is_e V IsE : is_e (snd T) Ev : eval (snd T) V @ Ev1 : eval (app T (abs "A" (abs "B" (var "B")))) V * ============================ is_e V
< case IsE. Subgoal 7: Variables: V T IH : forall E V, is_e E -> eval E V * -> is_e V Ev : eval (snd T) V @ Ev1 : eval (app T (abs "A" (abs "B" (var "B")))) V * H1 : is_e T ============================ is_e V
< apply IH to _ Ev1. Subgoal 7.1: Variables: V T IH : forall E V, is_e E -> eval E V * -> is_e V Ev : eval (snd T) V @ Ev1 : eval (app T (abs "A" (abs "B" (var "B")))) V * H1 : is_e T ============================ is_e (app T (abs "A" (abs "B" (var "B"))))
< search 10. Subgoal 7: Variables: V T IH : forall E V, is_e E -> eval E V * -> is_e V Ev : eval (snd T) V @ Ev1 : eval (app T (abs "A" (abs "B" (var "B")))) V * H1 : is_e T H2 : is_e V ============================ is_e V
< search. Proof completed.
< Prove lambda_calculus:host:subst_unique. Subgoal 8: Variables: X R SB S2 S1 T2 T1 IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsE : is_e (pair T1 T2) IsX : is_string X IsR : is_e R SA : subst X R (pair T1 T2) (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S1) S2) @ SB : subst X R (pair T1 T2) SB SA1 : subst X R T1 S1 * SA2 : subst X R T2 S2 * ============================ app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S1) S2 = SB
< case IsE. Subgoal 8: Variables: X R SB S2 S1 T2 T1 IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsX : is_string X IsR : is_e R SA : subst X R (pair T1 T2) (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S1) S2) @ SB : subst X R (pair T1 T2) SB SA1 : subst X R T1 S1 * SA2 : subst X R T2 S2 * H1 : is_e T1 H2 : is_e T2 ============================ app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S1) S2 = SB
< SB: case SB. Subgoal 8: Variables: X R S2 S1 T2 T1 S4 S3 IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsX : is_string X IsR : is_e R SA : subst X R (pair T1 T2) (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S1) S2) @ SA1 : subst X R T1 S1 * SA2 : subst X R T2 S2 * H1 : is_e T1 H2 : is_e T2 SB : subst X R T1 S3 SB1 : subst X R T2 S4 ============================ app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S1) S2 = app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S3) S4
< apply IH to _ _ _ SA1 SB. Subgoal 8: Variables: X R S2 T2 T1 S4 S3 IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsX : is_string X IsR : is_e R SA : subst X R (pair T1 T2) (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S3) S2) @ SA1 : subst X R T1 S3 * SA2 : subst X R T2 S2 * H1 : is_e T1 H2 : is_e T2 SB : subst X R T1 S3 SB1 : subst X R T2 S4 ============================ app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S3) S2 = app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S3) S4
< apply IH to _ _ _ SA2 SB1. Subgoal 8: Variables: X R T2 T1 S4 S3 IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsX : is_string X IsR : is_e R SA : subst X R (pair T1 T2) (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S3) S4) @ SA1 : subst X R T1 S3 * SA2 : subst X R T2 S4 * H1 : is_e T1 H2 : is_e T2 SB : subst X R T1 S3 SB1 : subst X R T2 S4 ============================ app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S3) S4 = app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S3) S4
< search 20. Subgoal 9: Variables: X R SB S T IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsE : is_e (fst T) IsX : is_string X IsR : is_e R SA : subst X R (fst T) (app S (abs "A" (abs "B" (var "A")))) @ SB : subst X R (fst T) SB SA1 : subst X R T S * ============================ app S (abs "A" (abs "B" (var "A"))) = SB
< case IsE. Subgoal 9: Variables: X R SB S T IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsX : is_string X IsR : is_e R SA : subst X R (fst T) (app S (abs "A" (abs "B" (var "A")))) @ SB : subst X R (fst T) SB SA1 : subst X R T S * H1 : is_e T ============================ app S (abs "A" (abs "B" (var "A"))) = SB
< SB: case SB. Subgoal 9: Variables: X R S T S1 IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsX : is_string X IsR : is_e R SA : subst X R (fst T) (app S (abs "A" (abs "B" (var "A")))) @ SA1 : subst X R T S * H1 : is_e T SB : subst X R T S1 ============================ app S (abs "A" (abs "B" (var "A"))) = app S1 (abs "A" (abs "B" (var "A")))
< apply IH to _ _ _ SA1 SB. Subgoal 9: Variables: X R T S1 IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsX : is_string X IsR : is_e R SA : subst X R (fst T) (app S1 (abs "A" (abs "B" (var "A")))) @ SA1 : subst X R T S1 * H1 : is_e T SB : subst X R T S1 ============================ app S1 (abs "A" (abs "B" (var "A"))) = app S1 (abs "A" (abs "B" (var "A")))
< search. Subgoal 10: Variables: X R SB S T IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsE : is_e (snd T) IsX : is_string X IsR : is_e R SA : subst X R (snd T) (app S (abs "A" (abs "B" (var "B")))) @ SB : subst X R (snd T) SB SA1 : subst X R T S * ============================ app S (abs "A" (abs "B" (var "B"))) = SB
< case IsE. Subgoal 10: Variables: X R SB S T IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsX : is_string X IsR : is_e R SA : subst X R (snd T) (app S (abs "A" (abs "B" (var "B")))) @ SB : subst X R (snd T) SB SA1 : subst X R T S * H1 : is_e T ============================ app S (abs "A" (abs "B" (var "B"))) = SB
< SB: case SB. Subgoal 10: Variables: X R S T S1 IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsX : is_string X IsR : is_e R SA : subst X R (snd T) (app S (abs "A" (abs "B" (var "B")))) @ SA1 : subst X R T S * H1 : is_e T SB : subst X R T S1 ============================ app S (abs "A" (abs "B" (var "B"))) = app S1 (abs "A" (abs "B" (var "B")))
< apply IH to _ _ _ SA1 SB. Subgoal 10: Variables: X R T S1 IH : forall X R E SA SB, is_e E -> is_string X -> is_e R -> subst X R E SA * -> subst X R E SB -> SA = SB IsX : is_string X IsR : is_e R SA : subst X R (snd T) (app S1 (abs "A" (abs "B" (var "B")))) @ SA1 : subst X R T S1 * H1 : is_e T SB : subst X R T S1 ============================ app S1 (abs "A" (abs "B" (var "B"))) = app S1 (abs "A" (abs "B" (var "B")))
< search. Proof completed.
< Prove lambda_calculus:host:eval_unique. Subgoal 5: Variables: VA VB T2 T1 IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB IsE : is_e (pair T1 T2) EvA : eval (pair T1 T2) VA @ EvB : eval (pair T1 T2) VB EvA1 : eval (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) VA * ============================ VA = VB
< case IsE. Subgoal 5: Variables: VA VB T2 T1 IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB EvA : eval (pair T1 T2) VA @ EvB : eval (pair T1 T2) VB EvA1 : eval (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) VA * H1 : is_e T1 H2 : is_e T2 ============================ VA = VB
< EvB: case EvB. Subgoal 5: Variables: VA VB T2 T1 IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB EvA : eval (pair T1 T2) VA @ EvA1 : eval (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) VA * H1 : is_e T1 H2 : is_e T2 EvB : eval (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) VB ============================ VA = VB
< apply IH to _ EvA1 EvB. Subgoal 5.1: Variables: VA VB T2 T1 IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB EvA : eval (pair T1 T2) VA @ EvA1 : eval (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) VA * H1 : is_e T1 H2 : is_e T2 EvB : eval (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) VB ============================ is_e (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2)
< search 20. Subgoal 5: Variables: VB T2 T1 IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB EvA : eval (pair T1 T2) VB @ EvA1 : eval (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) VB * H1 : is_e T1 H2 : is_e T2 EvB : eval (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) VB ============================ VB = VB
< search. Subgoal 6: Variables: VA VB T IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB IsE : is_e (fst T) EvA : eval (fst T) VA @ EvB : eval (fst T) VB EvA1 : eval (app T (abs "A" (abs "B" (var "A")))) VA * ============================ VA = VB
< case IsE. Subgoal 6: Variables: VA VB T IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB EvA : eval (fst T) VA @ EvB : eval (fst T) VB EvA1 : eval (app T (abs "A" (abs "B" (var "A")))) VA * H1 : is_e T ============================ VA = VB
< EvB: case EvB. Subgoal 6: Variables: VA VB T IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB EvA : eval (fst T) VA @ EvA1 : eval (app T (abs "A" (abs "B" (var "A")))) VA * H1 : is_e T EvB : eval (app T (abs "A" (abs "B" (var "A")))) VB ============================ VA = VB
< apply IH to _ EvA1 EvB. Subgoal 6.1: Variables: VA VB T IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB EvA : eval (fst T) VA @ EvA1 : eval (app T (abs "A" (abs "B" (var "A")))) VA * H1 : is_e T EvB : eval (app T (abs "A" (abs "B" (var "A")))) VB ============================ is_e (app T (abs "A" (abs "B" (var "A"))))
< search 10. Subgoal 6: Variables: VB T IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB EvA : eval (fst T) VB @ EvA1 : eval (app T (abs "A" (abs "B" (var "A")))) VB * H1 : is_e T EvB : eval (app T (abs "A" (abs "B" (var "A")))) VB ============================ VB = VB
< search. Subgoal 7: Variables: VA VB T IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB IsE : is_e (snd T) EvA : eval (snd T) VA @ EvB : eval (snd T) VB EvA1 : eval (app T (abs "A" (abs "B" (var "B")))) VA * ============================ VA = VB
< case IsE. Subgoal 7: Variables: VA VB T IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB EvA : eval (snd T) VA @ EvB : eval (snd T) VB EvA1 : eval (app T (abs "A" (abs "B" (var "B")))) VA * H1 : is_e T ============================ VA = VB
< EvB: case EvB. Subgoal 7: Variables: VA VB T IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB EvA : eval (snd T) VA @ EvA1 : eval (app T (abs "A" (abs "B" (var "B")))) VA * H1 : is_e T EvB : eval (app T (abs "A" (abs "B" (var "B")))) VB ============================ VA = VB
< apply IH to _ EvA1 EvB. Subgoal 7.1: Variables: VA VB T IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB EvA : eval (snd T) VA @ EvA1 : eval (app T (abs "A" (abs "B" (var "B")))) VA * H1 : is_e T EvB : eval (app T (abs "A" (abs "B" (var "B")))) VB ============================ is_e (app T (abs "A" (abs "B" (var "B"))))
< search 10. Subgoal 7: Variables: VB T IH : forall E VA VB, is_e E -> eval E VA * -> eval E VB -> VA = VB EvA : eval (snd T) VB @ EvA1 : eval (app T (abs "A" (abs "B" (var "B")))) VB * H1 : is_e T EvB : eval (app T (abs "A" (abs "B" (var "B")))) VB ============================ VB = VB
< search. Proof completed.
< Prove_Constraint lambda_calculus:host:proj_subst. Subgoal 1: Variables: X R S T2 T1 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsE : is_e (pair T1 T2) IsX : is_string X IsR : is_e R S : subst X R (pair T1 T2) S ============================ exists S', subst X R (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) S'
< case IsE. Subgoal 1: Variables: X R S T2 T1 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsX : is_string X IsR : is_e R S : subst X R (pair T1 T2) S H1 : is_e T1 H2 : is_e T2 ============================ exists S', subst X R (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) S'
< S: case S. Subgoal 1: Variables: X R T2 T1 S2 S1 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsX : is_string X IsR : is_e R H1 : is_e T1 H2 : is_e T2 S : subst X R T1 S1 S1 : subst X R T2 S2 ============================ exists S', subst X R (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) S'
< OrA: apply is_string_eq_or_not to IsX _ with S2 = "A". Subgoal 1: Variables: X R T2 T1 S2 S1 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsX : is_string X IsR : is_e R H1 : is_e T1 H2 : is_e T2 S : subst X R T1 S1 S1 : subst X R T2 S2 OrA : X = "A" \/ (X = "A" -> false) ============================ exists S', subst X R (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) S'
< OrB: apply is_string_eq_or_not to IsX _ with S2 = "B". Subgoal 1: Variables: X R T2 T1 S2 S1 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsX : is_string X IsR : is_e R H1 : is_e T1 H2 : is_e T2 S : subst X R T1 S1 S1 : subst X R T2 S2 OrA : X = "A" \/ (X = "A" -> false) OrB : X = "B" \/ (X = "B" -> false) ============================ exists S', subst X R (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) S'
< OrS: apply is_string_eq_or_not to IsX _ with S2 = "S". Subgoal 1: Variables: X R T2 T1 S2 S1 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsX : is_string X IsR : is_e R H1 : is_e T1 H2 : is_e T2 S : subst X R T1 S1 S1 : subst X R T2 S2 OrA : X = "A" \/ (X = "A" -> false) OrB : X = "B" \/ (X = "B" -> false) OrS : X = "S" \/ (X = "S" -> false) ============================ exists S', subst X R (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) S'
< case OrA. Subgoal 1.1: Variables: R T2 T1 S2 S1 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsX : is_string "A" IsR : is_e R H1 : is_e T1 H2 : is_e T2 S : subst "A" R T1 S1 S1 : subst "A" R T2 S2 OrB : "A" = "B" \/ ("A" = "B" -> false) OrS : "A" = "S" \/ ("A" = "S" -> false) ============================ exists S', subst "A" R (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) S'
< search 20. Subgoal 1.2: Variables: X R T2 T1 S2 S1 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsX : is_string X IsR : is_e R H1 : is_e T1 H2 : is_e T2 S : subst X R T1 S1 S1 : subst X R T2 S2 OrB : X = "B" \/ (X = "B" -> false) OrS : X = "S" \/ (X = "S" -> false) H3 : X = "A" -> false ============================ exists S', subst X R (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) S'
< case OrB. Subgoal 1.2.1: Variables: R T2 T1 S2 S1 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsX : is_string "B" IsR : is_e R H1 : is_e T1 H2 : is_e T2 S : subst "B" R T1 S1 S1 : subst "B" R T2 S2 OrS : "B" = "S" \/ ("B" = "S" -> false) H3 : "B" = "A" -> false ============================ exists S', subst "B" R (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) S'
< search 20. Subgoal 1.2.2: Variables: X R T2 T1 S2 S1 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsX : is_string X IsR : is_e R H1 : is_e T1 H2 : is_e T2 S : subst X R T1 S1 S1 : subst X R T2 S2 OrS : X = "S" \/ (X = "S" -> false) H3 : X = "A" -> false H4 : X = "B" -> false ============================ exists S', subst X R (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) S'
< case OrS. Subgoal 1.2.2.1: Variables: R T2 T1 S2 S1 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsX : is_string "S" IsR : is_e R H1 : is_e T1 H2 : is_e T2 S : subst "S" R T1 S1 S1 : subst "S" R T2 S2 H3 : "S" = "A" -> false H4 : "S" = "B" -> false ============================ exists S', subst "S" R (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) S'
< search 20. Subgoal 1.2.2.2: Variables: X R T2 T1 S2 S1 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsX : is_string X IsR : is_e R H1 : is_e T1 H2 : is_e T2 S : subst X R T1 S1 S1 : subst X R T2 S2 H3 : X = "A" -> false H4 : X = "B" -> false H5 : X = "S" -> false ============================ exists S', subst X R (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) S'
< search 20. Subgoal 2: Variables: X R S T Proj : |{e}- fst T ~~> app T (abs "A" (abs "B" (var "A"))) IsE : is_e (fst T) IsX : is_string X IsR : is_e R S : subst X R (fst T) S ============================ exists S', subst X R (app T (abs "A" (abs "B" (var "A")))) S'
< case IsE. Subgoal 2: Variables: X R S T Proj : |{e}- fst T ~~> app T (abs "A" (abs "B" (var "A"))) IsX : is_string X IsR : is_e R S : subst X R (fst T) S H1 : is_e T ============================ exists S', subst X R (app T (abs "A" (abs "B" (var "A")))) S'
< S: case S. Subgoal 2: Variables: X R T S1 Proj : |{e}- fst T ~~> app T (abs "A" (abs "B" (var "A"))) IsX : is_string X IsR : is_e R H1 : is_e T S : subst X R T S1 ============================ exists S', subst X R (app T (abs "A" (abs "B" (var "A")))) S'
< OrA: apply is_string_eq_or_not to IsX _ with S2 = "A". Subgoal 2: Variables: X R T S1 Proj : |{e}- fst T ~~> app T (abs "A" (abs "B" (var "A"))) IsX : is_string X IsR : is_e R H1 : is_e T S : subst X R T S1 OrA : X = "A" \/ (X = "A" -> false) ============================ exists S', subst X R (app T (abs "A" (abs "B" (var "A")))) S'
< OrB: apply is_string_eq_or_not to IsX _ with S2 = "B". Subgoal 2: Variables: X R T S1 Proj : |{e}- fst T ~~> app T (abs "A" (abs "B" (var "A"))) IsX : is_string X IsR : is_e R H1 : is_e T S : subst X R T S1 OrA : X = "A" \/ (X = "A" -> false) OrB : X = "B" \/ (X = "B" -> false) ============================ exists S', subst X R (app T (abs "A" (abs "B" (var "A")))) S'
< case OrA. Subgoal 2.1: Variables: R T S1 Proj : |{e}- fst T ~~> app T (abs "A" (abs "B" (var "A"))) IsX : is_string "A" IsR : is_e R H1 : is_e T S : subst "A" R T S1 OrB : "A" = "B" \/ ("A" = "B" -> false) ============================ exists S', subst "A" R (app T (abs "A" (abs "B" (var "A")))) S'
< search 10. Subgoal 2.2: Variables: X R T S1 Proj : |{e}- fst T ~~> app T (abs "A" (abs "B" (var "A"))) IsX : is_string X IsR : is_e R H1 : is_e T S : subst X R T S1 OrB : X = "B" \/ (X = "B" -> false) H2 : X = "A" -> false ============================ exists S', subst X R (app T (abs "A" (abs "B" (var "A")))) S'
< case OrB. Subgoal 2.2.1: Variables: R T S1 Proj : |{e}- fst T ~~> app T (abs "A" (abs "B" (var "A"))) IsX : is_string "B" IsR : is_e R H1 : is_e T S : subst "B" R T S1 H2 : "B" = "A" -> false ============================ exists S', subst "B" R (app T (abs "A" (abs "B" (var "A")))) S'
< search 10. Subgoal 2.2.2: Variables: X R T S1 Proj : |{e}- fst T ~~> app T (abs "A" (abs "B" (var "A"))) IsX : is_string X IsR : is_e R H1 : is_e T S : subst X R T S1 H2 : X = "A" -> false H3 : X = "B" -> false ============================ exists S', subst X R (app T (abs "A" (abs "B" (var "A")))) S'
< search 10. Subgoal 3: Variables: X R S T Proj : |{e}- snd T ~~> app T (abs "A" (abs "B" (var "B"))) IsE : is_e (snd T) IsX : is_string X IsR : is_e R S : subst X R (snd T) S ============================ exists S', subst X R (app T (abs "A" (abs "B" (var "B")))) S'
< case IsE. Subgoal 3: Variables: X R S T Proj : |{e}- snd T ~~> app T (abs "A" (abs "B" (var "B"))) IsX : is_string X IsR : is_e R S : subst X R (snd T) S H1 : is_e T ============================ exists S', subst X R (app T (abs "A" (abs "B" (var "B")))) S'
< S: case S. Subgoal 3: Variables: X R T S1 Proj : |{e}- snd T ~~> app T (abs "A" (abs "B" (var "B"))) IsX : is_string X IsR : is_e R H1 : is_e T S : subst X R T S1 ============================ exists S', subst X R (app T (abs "A" (abs "B" (var "B")))) S'
< OrA: apply is_string_eq_or_not to IsX _ with S2 = "A". Subgoal 3: Variables: X R T S1 Proj : |{e}- snd T ~~> app T (abs "A" (abs "B" (var "B"))) IsX : is_string X IsR : is_e R H1 : is_e T S : subst X R T S1 OrA : X = "A" \/ (X = "A" -> false) ============================ exists S', subst X R (app T (abs "A" (abs "B" (var "B")))) S'
< OrB: apply is_string_eq_or_not to IsX _ with S2 = "B". Subgoal 3: Variables: X R T S1 Proj : |{e}- snd T ~~> app T (abs "A" (abs "B" (var "B"))) IsX : is_string X IsR : is_e R H1 : is_e T S : subst X R T S1 OrA : X = "A" \/ (X = "A" -> false) OrB : X = "B" \/ (X = "B" -> false) ============================ exists S', subst X R (app T (abs "A" (abs "B" (var "B")))) S'
< case OrA. Subgoal 3.1: Variables: R T S1 Proj : |{e}- snd T ~~> app T (abs "A" (abs "B" (var "B"))) IsX : is_string "A" IsR : is_e R H1 : is_e T S : subst "A" R T S1 OrB : "A" = "B" \/ ("A" = "B" -> false) ============================ exists S', subst "A" R (app T (abs "A" (abs "B" (var "B")))) S'
< search 10. Subgoal 3.2: Variables: X R T S1 Proj : |{e}- snd T ~~> app T (abs "A" (abs "B" (var "B"))) IsX : is_string X IsR : is_e R H1 : is_e T S : subst X R T S1 OrB : X = "B" \/ (X = "B" -> false) H2 : X = "A" -> false ============================ exists S', subst X R (app T (abs "A" (abs "B" (var "B")))) S'
< case OrB. Subgoal 3.2.1: Variables: R T S1 Proj : |{e}- snd T ~~> app T (abs "A" (abs "B" (var "B"))) IsX : is_string "B" IsR : is_e R H1 : is_e T S : subst "B" R T S1 H2 : "B" = "A" -> false ============================ exists S', subst "B" R (app T (abs "A" (abs "B" (var "B")))) S'
< search 10. Subgoal 3.2.2: Variables: X R T S1 Proj : |{e}- snd T ~~> app T (abs "A" (abs "B" (var "B"))) IsX : is_string X IsR : is_e R H1 : is_e T S : subst X R T S1 H2 : X = "A" -> false H3 : X = "B" -> false ============================ exists S', subst X R (app T (abs "A" (abs "B" (var "B")))) S'
< search 10. Proof completed.
< Prove_Constraint lambda_calculus:host:proj_subst_same. Subgoal 1: Variables: X R S S' T2 T1 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsE : is_e (pair T1 T2) IsX : is_string X IsR : is_e R S : subst X R (pair T1 T2) S S' : subst X R (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) S' ============================ S = S'
< case IsE. Subgoal 1: Variables: X R S S' T2 T1 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsX : is_string X IsR : is_e R S : subst X R (pair T1 T2) S S' : subst X R (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) S' H1 : is_e T1 H2 : is_e T2 ============================ S = S'
< S: case S. Subgoal 1: Variables: X R S' T2 T1 S2 S1 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsX : is_string X IsR : is_e R S' : subst X R (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) S' H1 : is_e T1 H2 : is_e T2 S : subst X R T1 S1 S1 : subst X R T2 S2 ============================ app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S1) S2 = S'
< S': case S'. Subgoal 1: Variables: X R T2 T1 S2 S1 S4 S3 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsX : is_string X IsR : is_e R H1 : is_e T1 H2 : is_e T2 S : subst X R T1 S1 S1 : subst X R T2 S2 S' : subst X R (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) S3 S'1 : subst X R T2 S4 ============================ app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S1) S2 = app S3 S4
< apply subst_unique to _ _ _ S1 S'1. Subgoal 1: Variables: X R T2 T1 S1 S4 S3 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsX : is_string X IsR : is_e R H1 : is_e T1 H2 : is_e T2 S : subst X R T1 S1 S1 : subst X R T2 S4 S' : subst X R (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) S3 S'1 : subst X R T2 S4 ============================ app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S1) S4 = app S3 S4
< clear S'1. Subgoal 1: Variables: X R T2 T1 S1 S4 S3 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsX : is_string X IsR : is_e R H1 : is_e T1 H2 : is_e T2 S : subst X R T1 S1 S1 : subst X R T2 S4 S' : subst X R (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) S3 ============================ app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S1) S4 = app S3 S4
< S': case S'. Subgoal 1: Variables: X R T2 T1 S1 S4 S6 S5 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsX : is_string X IsR : is_e R H1 : is_e T1 H2 : is_e T2 S : subst X R T1 S1 S1 : subst X R T2 S4 S' : subst X R (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S5 S'1 : subst X R T1 S6 ============================ app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S1) S4 = app (app S5 S6) S4
< apply subst_unique to _ _ _ S S'1. Subgoal 1: Variables: X R T2 T1 S4 S6 S5 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsX : is_string X IsR : is_e R H1 : is_e T1 H2 : is_e T2 S : subst X R T1 S6 S1 : subst X R T2 S4 S' : subst X R (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S5 S'1 : subst X R T1 S6 ============================ app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S6) S4 = app (app S5 S6) S4
< clear S'1. Subgoal 1: Variables: X R T2 T1 S4 S6 S5 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsX : is_string X IsR : is_e R H1 : is_e T1 H2 : is_e T2 S : subst X R T1 S6 S1 : subst X R T2 S4 S' : subst X R (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S5 ============================ app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S6) S4 = app (app S5 S6) S4
< S': case S'. Subgoal 1.1: Variables: R T2 T1 S4 S6 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsX : is_string "A" IsR : is_e R H1 : is_e T1 H2 : is_e T2 S : subst "A" R T1 S6 S1 : subst "A" R T2 S4 ============================ app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S6) S4 = app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S6) S4
< search 20. Subgoal 1.2: Variables: X R T2 T1 S4 S6 B Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsX : is_string X IsR : is_e R H1 : is_e T1 H2 : is_e T2 S : subst X R T1 S6 S1 : subst X R T2 S4 S' : X = "A" -> false S'1 : subst X R (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B")))) B ============================ app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S6) S4 = app (app (abs "A" B) S6) S4
< S': case S'1. Subgoal 1.2.1: Variables: R T2 T1 S4 S6 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsX : is_string "B" IsR : is_e R H1 : is_e T1 H2 : is_e T2 S : subst "B" R T1 S6 S1 : subst "B" R T2 S4 S' : "B" = "A" -> false ============================ app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S6) S4 = app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S6) S4
< search 20. Subgoal 1.2.2: Variables: X R T2 T1 S4 S6 B1 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsX : is_string X IsR : is_e R H1 : is_e T1 H2 : is_e T2 S : subst X R T1 S6 S1 : subst X R T2 S4 S' : X = "A" -> false S'1 : X = "B" -> false S'2 : subst X R (abs "S" (app (app (var "S") (var "A")) (var "B"))) B1 ============================ app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S6) S4 = app (app (abs "A" (abs "B" B1)) S6) S4
< S': case S'2. Subgoal 1.2.2.1: Variables: R T2 T1 S4 S6 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsX : is_string "S" IsR : is_e R H1 : is_e T1 H2 : is_e T2 S : subst "S" R T1 S6 S1 : subst "S" R T2 S4 S' : "S" = "A" -> false S'1 : "S" = "B" -> false ============================ app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S6) S4 = app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S6) S4
< search 20. Subgoal 1.2.2.2: Variables: X R T2 T1 S4 S6 B2 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsX : is_string X IsR : is_e R H1 : is_e T1 H2 : is_e T2 S : subst X R T1 S6 S1 : subst X R T2 S4 S' : X = "A" -> false S'1 : X = "B" -> false S'2 : X = "S" -> false S'3 : subst X R (app (app (var "S") (var "A")) (var "B")) B2 ============================ app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S6) S4 = app (app (abs "A" (abs "B" (abs "S" B2))) S6) S4
< S': case S'3. Subgoal 1.2.2.2: Variables: X R T2 T1 S4 S6 S8 S7 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsX : is_string X IsR : is_e R H1 : is_e T1 H2 : is_e T2 S : subst X R T1 S6 S1 : subst X R T2 S4 S' : X = "A" -> false S'1 : X = "B" -> false S'2 : X = "S" -> false S'3 : subst X R (app (var "S") (var "A")) S7 S'4 : subst X R (var "B") S8 ============================ app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S6) S4 = app (app (abs "A" (abs "B" (abs "S" (app S7 S8)))) S6) S4
< S': case S'3. Subgoal 1.2.2.2: Variables: X R T2 T1 S4 S6 S8 S10 S9 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsX : is_string X IsR : is_e R H1 : is_e T1 H2 : is_e T2 S : subst X R T1 S6 S1 : subst X R T2 S4 S' : X = "A" -> false S'1 : X = "B" -> false S'2 : X = "S" -> false S'4 : subst X R (var "B") S8 S'3 : subst X R (var "S") S9 S'5 : subst X R (var "A") S10 ============================ app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S6) S4 = app (app (abs "A" (abs "B" (abs "S" (app (app S9 S10) S8)))) S6) S4
< case S'4. Subgoal 1.2.2.2.1: Variables: T2 T1 S4 S6 S8 S10 S9 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsX : is_string "B" IsR : is_e S8 H1 : is_e T1 H2 : is_e T2 S : subst "B" S8 T1 S6 S1 : subst "B" S8 T2 S4 S' : "B" = "A" -> false S'1 : "B" = "B" -> false S'2 : "B" = "S" -> false S'3 : subst "B" S8 (var "S") S9 S'5 : subst "B" S8 (var "A") S10 ============================ app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S6) S4 = app (app (abs "A" (abs "B" (abs "S" (app (app S9 S10) S8)))) S6) S4
< apply S'1 to _. Subgoal 1.2.2.2.2: Variables: X R T2 T1 S4 S6 S10 S9 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsX : is_string X IsR : is_e R H1 : is_e T1 H2 : is_e T2 S : subst X R T1 S6 S1 : subst X R T2 S4 S' : X = "A" -> false S'1 : X = "B" -> false S'2 : X = "S" -> false S'3 : subst X R (var "S") S9 S'5 : subst X R (var "A") S10 H3 : X = "B" -> false ============================ app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S6) S4 = app (app (abs "A" (abs "B" (abs "S" (app (app S9 S10) (var "B"))))) S6) S4
< case S'3. Subgoal 1.2.2.2.2.1: Variables: T2 T1 S4 S6 S10 S9 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsX : is_string "S" IsR : is_e S9 H1 : is_e T1 H2 : is_e T2 S : subst "S" S9 T1 S6 S1 : subst "S" S9 T2 S4 S' : "S" = "A" -> false S'1 : "S" = "B" -> false S'2 : "S" = "S" -> false S'5 : subst "S" S9 (var "A") S10 H3 : "S" = "B" -> false ============================ app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S6) S4 = app (app (abs "A" (abs "B" (abs "S" (app (app S9 S10) (var "B"))))) S6) S4
< apply S'2 to _. Subgoal 1.2.2.2.2.2: Variables: X R T2 T1 S4 S6 S10 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsX : is_string X IsR : is_e R H1 : is_e T1 H2 : is_e T2 S : subst X R T1 S6 S1 : subst X R T2 S4 S' : X = "A" -> false S'1 : X = "B" -> false S'2 : X = "S" -> false S'5 : subst X R (var "A") S10 H3 : X = "B" -> false H4 : X = "S" -> false ============================ app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S6) S4 = app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") S10) (var "B"))))) S6) S4
< case S'5. Subgoal 1.2.2.2.2.2.1: Variables: T2 T1 S4 S6 S10 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsX : is_string "A" IsR : is_e S10 H1 : is_e T1 H2 : is_e T2 S : subst "A" S10 T1 S6 S1 : subst "A" S10 T2 S4 S' : "A" = "A" -> false S'1 : "A" = "B" -> false S'2 : "A" = "S" -> false H3 : "A" = "B" -> false H4 : "A" = "S" -> false ============================ app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S6) S4 = app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") S10) (var "B"))))) S6) S4
< apply S' to _. Subgoal 1.2.2.2.2.2.2: Variables: X R T2 T1 S4 S6 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsX : is_string X IsR : is_e R H1 : is_e T1 H2 : is_e T2 S : subst X R T1 S6 S1 : subst X R T2 S4 S' : X = "A" -> false S'1 : X = "B" -> false S'2 : X = "S" -> false H3 : X = "B" -> false H4 : X = "S" -> false H5 : X = "A" -> false ============================ app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S6) S4 = app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) S6) S4
< search 20. Subgoal 2: Variables: X R S S' T Proj : |{e}- fst T ~~> app T (abs "A" (abs "B" (var "A"))) IsE : is_e (fst T) IsX : is_string X IsR : is_e R S : subst X R (fst T) S S' : subst X R (app T (abs "A" (abs "B" (var "A")))) S' ============================ S = S'
< case IsE. Subgoal 2: Variables: X R S S' T Proj : |{e}- fst T ~~> app T (abs "A" (abs "B" (var "A"))) IsX : is_string X IsR : is_e R S : subst X R (fst T) S S' : subst X R (app T (abs "A" (abs "B" (var "A")))) S' H1 : is_e T ============================ S = S'
< S: case S. Subgoal 2: Variables: X R S' T S1 Proj : |{e}- fst T ~~> app T (abs "A" (abs "B" (var "A"))) IsX : is_string X IsR : is_e R S' : subst X R (app T (abs "A" (abs "B" (var "A")))) S' H1 : is_e T S : subst X R T S1 ============================ app S1 (abs "A" (abs "B" (var "A"))) = S'
< S': case S'. Subgoal 2: Variables: X R T S1 S3 S2 Proj : |{e}- fst T ~~> app T (abs "A" (abs "B" (var "A"))) IsX : is_string X IsR : is_e R H1 : is_e T S : subst X R T S1 S' : subst X R T S2 S'1 : subst X R (abs "A" (abs "B" (var "A"))) S3 ============================ app S1 (abs "A" (abs "B" (var "A"))) = app S2 S3
< apply subst_unique to _ _ _ S S'. Subgoal 2: Variables: X R T S3 S2 Proj : |{e}- fst T ~~> app T (abs "A" (abs "B" (var "A"))) IsX : is_string X IsR : is_e R H1 : is_e T S : subst X R T S2 S' : subst X R T S2 S'1 : subst X R (abs "A" (abs "B" (var "A"))) S3 ============================ app S2 (abs "A" (abs "B" (var "A"))) = app S2 S3
< clear S'. Subgoal 2: Variables: X R T S3 S2 Proj : |{e}- fst T ~~> app T (abs "A" (abs "B" (var "A"))) IsX : is_string X IsR : is_e R H1 : is_e T S : subst X R T S2 S'1 : subst X R (abs "A" (abs "B" (var "A"))) S3 ============================ app S2 (abs "A" (abs "B" (var "A"))) = app S2 S3
< S': case S'1. Subgoal 2.1: Variables: R T S2 Proj : |{e}- fst T ~~> app T (abs "A" (abs "B" (var "A"))) IsX : is_string "A" IsR : is_e R H1 : is_e T S : subst "A" R T S2 ============================ app S2 (abs "A" (abs "B" (var "A"))) = app S2 (abs "A" (abs "B" (var "A")))
< search 10. Subgoal 2.2: Variables: X R T S2 B Proj : |{e}- fst T ~~> app T (abs "A" (abs "B" (var "A"))) IsX : is_string X IsR : is_e R H1 : is_e T S : subst X R T S2 S' : X = "A" -> false S'1 : subst X R (abs "B" (var "A")) B ============================ app S2 (abs "A" (abs "B" (var "A"))) = app S2 (abs "A" B)
< S': case S'1. Subgoal 2.2.1: Variables: R T S2 Proj : |{e}- fst T ~~> app T (abs "A" (abs "B" (var "A"))) IsX : is_string "B" IsR : is_e R H1 : is_e T S : subst "B" R T S2 S' : "B" = "A" -> false ============================ app S2 (abs "A" (abs "B" (var "A"))) = app S2 (abs "A" (abs "B" (var "A")))
< search 10. Subgoal 2.2.2: Variables: X R T S2 B1 Proj : |{e}- fst T ~~> app T (abs "A" (abs "B" (var "A"))) IsX : is_string X IsR : is_e R H1 : is_e T S : subst X R T S2 S' : X = "A" -> false S'1 : X = "B" -> false S'2 : subst X R (var "A") B1 ============================ app S2 (abs "A" (abs "B" (var "A"))) = app S2 (abs "A" (abs "B" B1))
< case S'2. Subgoal 2.2.2.1: Variables: T S2 B1 Proj : |{e}- fst T ~~> app T (abs "A" (abs "B" (var "A"))) IsX : is_string "A" IsR : is_e B1 H1 : is_e T S : subst "A" B1 T S2 S' : "A" = "A" -> false S'1 : "A" = "B" -> false ============================ app S2 (abs "A" (abs "B" (var "A"))) = app S2 (abs "A" (abs "B" B1))
< apply S' to _. Subgoal 2.2.2.2: Variables: X R T S2 Proj : |{e}- fst T ~~> app T (abs "A" (abs "B" (var "A"))) IsX : is_string X IsR : is_e R H1 : is_e T S : subst X R T S2 S' : X = "A" -> false S'1 : X = "B" -> false H2 : X = "A" -> false ============================ app S2 (abs "A" (abs "B" (var "A"))) = app S2 (abs "A" (abs "B" (var "A")))
< search 10. Subgoal 3: Variables: X R S S' T Proj : |{e}- snd T ~~> app T (abs "A" (abs "B" (var "B"))) IsE : is_e (snd T) IsX : is_string X IsR : is_e R S : subst X R (snd T) S S' : subst X R (app T (abs "A" (abs "B" (var "B")))) S' ============================ S = S'
< case IsE. Subgoal 3: Variables: X R S S' T Proj : |{e}- snd T ~~> app T (abs "A" (abs "B" (var "B"))) IsX : is_string X IsR : is_e R S : subst X R (snd T) S S' : subst X R (app T (abs "A" (abs "B" (var "B")))) S' H1 : is_e T ============================ S = S'
< S: case S. Subgoal 3: Variables: X R S' T S1 Proj : |{e}- snd T ~~> app T (abs "A" (abs "B" (var "B"))) IsX : is_string X IsR : is_e R S' : subst X R (app T (abs "A" (abs "B" (var "B")))) S' H1 : is_e T S : subst X R T S1 ============================ app S1 (abs "A" (abs "B" (var "B"))) = S'
< S': case S'. Subgoal 3: Variables: X R T S1 S3 S2 Proj : |{e}- snd T ~~> app T (abs "A" (abs "B" (var "B"))) IsX : is_string X IsR : is_e R H1 : is_e T S : subst X R T S1 S' : subst X R T S2 S'1 : subst X R (abs "A" (abs "B" (var "B"))) S3 ============================ app S1 (abs "A" (abs "B" (var "B"))) = app S2 S3
< apply subst_unique to _ _ _ S S'. Subgoal 3: Variables: X R T S3 S2 Proj : |{e}- snd T ~~> app T (abs "A" (abs "B" (var "B"))) IsX : is_string X IsR : is_e R H1 : is_e T S : subst X R T S2 S' : subst X R T S2 S'1 : subst X R (abs "A" (abs "B" (var "B"))) S3 ============================ app S2 (abs "A" (abs "B" (var "B"))) = app S2 S3
< clear S'. Subgoal 3: Variables: X R T S3 S2 Proj : |{e}- snd T ~~> app T (abs "A" (abs "B" (var "B"))) IsX : is_string X IsR : is_e R H1 : is_e T S : subst X R T S2 S'1 : subst X R (abs "A" (abs "B" (var "B"))) S3 ============================ app S2 (abs "A" (abs "B" (var "B"))) = app S2 S3
< S': case S'1. Subgoal 3.1: Variables: R T S2 Proj : |{e}- snd T ~~> app T (abs "A" (abs "B" (var "B"))) IsX : is_string "A" IsR : is_e R H1 : is_e T S : subst "A" R T S2 ============================ app S2 (abs "A" (abs "B" (var "B"))) = app S2 (abs "A" (abs "B" (var "B")))
< search 10. Subgoal 3.2: Variables: X R T S2 B Proj : |{e}- snd T ~~> app T (abs "A" (abs "B" (var "B"))) IsX : is_string X IsR : is_e R H1 : is_e T S : subst X R T S2 S' : X = "A" -> false S'1 : subst X R (abs "B" (var "B")) B ============================ app S2 (abs "A" (abs "B" (var "B"))) = app S2 (abs "A" B)
< S': case S'1. Subgoal 3.2.1: Variables: R T S2 Proj : |{e}- snd T ~~> app T (abs "A" (abs "B" (var "B"))) IsX : is_string "B" IsR : is_e R H1 : is_e T S : subst "B" R T S2 S' : "B" = "A" -> false ============================ app S2 (abs "A" (abs "B" (var "B"))) = app S2 (abs "A" (abs "B" (var "B")))
< search 10. Subgoal 3.2.2: Variables: X R T S2 B1 Proj : |{e}- snd T ~~> app T (abs "A" (abs "B" (var "B"))) IsX : is_string X IsR : is_e R H1 : is_e T S : subst X R T S2 S' : X = "A" -> false S'1 : X = "B" -> false S'2 : subst X R (var "B") B1 ============================ app S2 (abs "A" (abs "B" (var "B"))) = app S2 (abs "A" (abs "B" B1))
< case S'2. Subgoal 3.2.2.1: Variables: T S2 B1 Proj : |{e}- snd T ~~> app T (abs "A" (abs "B" (var "B"))) IsX : is_string "B" IsR : is_e B1 H1 : is_e T S : subst "B" B1 T S2 S' : "B" = "A" -> false S'1 : "B" = "B" -> false ============================ app S2 (abs "A" (abs "B" (var "B"))) = app S2 (abs "A" (abs "B" B1))
< apply S'1 to _. Subgoal 3.2.2.2: Variables: X R T S2 Proj : |{e}- snd T ~~> app T (abs "A" (abs "B" (var "B"))) IsX : is_string X IsR : is_e R H1 : is_e T S : subst X R T S2 S' : X = "A" -> false S'1 : X = "B" -> false H2 : X = "B" -> false ============================ app S2 (abs "A" (abs "B" (var "B"))) = app S2 (abs "A" (abs "B" (var "B")))
< search 10. Proof completed.
< Prove_Constraint lambda_calculus:host:proj_eval. Subgoal 1: Variables: V T2 T1 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsE : is_e (pair T1 T2) Ev : eval (pair T1 T2) V ============================ exists V', eval (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) V'
< case Ev. Subgoal 1: Variables: V T2 T1 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsE : is_e (pair T1 T2) H1 : eval (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) V ============================ exists V', eval (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) V'
< search. Subgoal 2: Variables: V T Proj : |{e}- fst T ~~> app T (abs "A" (abs "B" (var "A"))) IsE : is_e (fst T) Ev : eval (fst T) V ============================ exists V', eval (app T (abs "A" (abs "B" (var "A")))) V'
< case Ev. Subgoal 2: Variables: V T Proj : |{e}- fst T ~~> app T (abs "A" (abs "B" (var "A"))) IsE : is_e (fst T) H1 : eval (app T (abs "A" (abs "B" (var "A")))) V ============================ exists V', eval (app T (abs "A" (abs "B" (var "A")))) V'
< search. Subgoal 3: Variables: V T Proj : |{e}- snd T ~~> app T (abs "A" (abs "B" (var "B"))) IsE : is_e (snd T) Ev : eval (snd T) V ============================ exists V', eval (app T (abs "A" (abs "B" (var "B")))) V'
< case Ev. Subgoal 3: Variables: V T Proj : |{e}- snd T ~~> app T (abs "A" (abs "B" (var "B"))) IsE : is_e (snd T) H1 : eval (app T (abs "A" (abs "B" (var "B")))) V ============================ exists V', eval (app T (abs "A" (abs "B" (var "B")))) V'
< search. Proof completed.
< Prove_Constraint lambda_calculus:host:proj_eval_same. Subgoal 1: Variables: V V' T2 T1 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 IsE : is_e (pair T1 T2) Ev : eval (pair T1 T2) V Ev' : eval (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) V' ============================ V = V'
< case IsE. Subgoal 1: Variables: V V' T2 T1 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 Ev : eval (pair T1 T2) V Ev' : eval (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) V' H1 : is_e T1 H2 : is_e T2 ============================ V = V'
< Ev: case Ev. Subgoal 1: Variables: V V' T2 T1 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 Ev' : eval (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) V' H1 : is_e T1 H2 : is_e T2 Ev : eval (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) V ============================ V = V'
< apply eval_unique to _ Ev Ev'. Subgoal 1.1: Variables: V V' T2 T1 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 Ev' : eval (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) V' H1 : is_e T1 H2 : is_e T2 Ev : eval (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) V ============================ is_e (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2)
< search 20. Subgoal 1: Variables: V' T2 T1 Proj : |{e}- pair T1 T2 ~~> app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2 Ev' : eval (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) V' H1 : is_e T1 H2 : is_e T2 Ev : eval (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) V' ============================ V' = V'
< search. Subgoal 2: Variables: V V' T Proj : |{e}- fst T ~~> app T (abs "A" (abs "B" (var "A"))) IsE : is_e (fst T) Ev : eval (fst T) V Ev' : eval (app T (abs "A" (abs "B" (var "A")))) V' ============================ V = V'
< case IsE. Subgoal 2: Variables: V V' T Proj : |{e}- fst T ~~> app T (abs "A" (abs "B" (var "A"))) Ev : eval (fst T) V Ev' : eval (app T (abs "A" (abs "B" (var "A")))) V' H1 : is_e T ============================ V = V'
< Ev: case Ev. Subgoal 2: Variables: V V' T Proj : |{e}- fst T ~~> app T (abs "A" (abs "B" (var "A"))) Ev' : eval (app T (abs "A" (abs "B" (var "A")))) V' H1 : is_e T Ev : eval (app T (abs "A" (abs "B" (var "A")))) V ============================ V = V'
< apply eval_unique to _ Ev Ev'. Subgoal 2.1: Variables: V V' T Proj : |{e}- fst T ~~> app T (abs "A" (abs "B" (var "A"))) Ev' : eval (app T (abs "A" (abs "B" (var "A")))) V' H1 : is_e T Ev : eval (app T (abs "A" (abs "B" (var "A")))) V ============================ is_e (app T (abs "A" (abs "B" (var "A"))))
< search 20. Subgoal 2: Variables: V' T Proj : |{e}- fst T ~~> app T (abs "A" (abs "B" (var "A"))) Ev' : eval (app T (abs "A" (abs "B" (var "A")))) V' H1 : is_e T Ev : eval (app T (abs "A" (abs "B" (var "A")))) V' ============================ V' = V'
< search. Subgoal 3: Variables: V V' T Proj : |{e}- snd T ~~> app T (abs "A" (abs "B" (var "B"))) IsE : is_e (snd T) Ev : eval (snd T) V Ev' : eval (app T (abs "A" (abs "B" (var "B")))) V' ============================ V = V'
< case IsE. Subgoal 3: Variables: V V' T Proj : |{e}- snd T ~~> app T (abs "A" (abs "B" (var "B"))) Ev : eval (snd T) V Ev' : eval (app T (abs "A" (abs "B" (var "B")))) V' H1 : is_e T ============================ V = V'
< Ev: case Ev. Subgoal 3: Variables: V V' T Proj : |{e}- snd T ~~> app T (abs "A" (abs "B" (var "B"))) Ev' : eval (app T (abs "A" (abs "B" (var "B")))) V' H1 : is_e T Ev : eval (app T (abs "A" (abs "B" (var "B")))) V ============================ V = V'
< apply eval_unique to _ Ev Ev'. Subgoal 3.1: Variables: V V' T Proj : |{e}- snd T ~~> app T (abs "A" (abs "B" (var "B"))) Ev' : eval (app T (abs "A" (abs "B" (var "B")))) V' H1 : is_e T Ev : eval (app T (abs "A" (abs "B" (var "B")))) V ============================ is_e (app T (abs "A" (abs "B" (var "B"))))
< search 20. Subgoal 3: Variables: V' T Proj : |{e}- snd T ~~> app T (abs "A" (abs "B" (var "B"))) Ev' : eval (app T (abs "A" (abs "B" (var "B")))) V' H1 : is_e T Ev : eval (app T (abs "A" (abs "B" (var "B")))) V' ============================ V' = V'
< search. Proof completed.
< Add_Ext_Size lambda_calculus:host:eval. Proof completed.
< Add_Proj_Rel lambda_calculus:host:eval. Proof completed.
< Prove_Ext_Ind lambda_calculus:host:eval. Subgoal 5: Variables: N V N2 T2 T1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (pair T1 T2) V N @@ Acc : acc N @ R1 : 1 + N2 = N R2 : <eval {ES}> (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) V N2 ** ============================ <eval {P}> (pair T1 T2) V
< apply ext_size_is_int_eval to R2. Subgoal 5: Variables: N V N2 T2 T1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (pair T1 T2) V N @@ Acc : acc N @ R1 : 1 + N2 = N R2 : <eval {ES}> (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) V N2 ** H1 : is_integer N2 ============================ <eval {P}> (pair T1 T2) V
< L: apply lt_plus_one to R1 _. Subgoal 5: Variables: N V N2 T2 T1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (pair T1 T2) V N @@ Acc : acc N @ R1 : 1 + N2 = N R2 : <eval {ES}> (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) V N2 ** H1 : is_integer N2 L : N2 < N ============================ <eval {P}> (pair T1 T2) V
< apply ext_size_pos_eval to R2. Subgoal 5: Variables: N V N2 T2 T1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (pair T1 T2) V N @@ Acc : acc N @ R1 : 1 + N2 = N R2 : <eval {ES}> (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) V N2 ** H1 : is_integer N2 L : N2 < N H2 : 0 <= N2 ============================ <eval {P}> (pair T1 T2) V
< Acc: case Acc. Subgoal 5: Variables: N V N2 T2 T1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (pair T1 T2) V N @@ R1 : 1 + N2 = N R2 : <eval {ES}> (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) V N2 ** H1 : is_integer N2 L : N2 < N H2 : 0 <= N2 Acc : forall M, 0 <= M -> M < N -> acc M * ============================ <eval {P}> (pair T1 T2) V
< A: apply Acc to _ L. Subgoal 5: Variables: N V N2 T2 T1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (pair T1 T2) V N @@ R1 : 1 + N2 = N R2 : <eval {ES}> (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) V N2 ** H1 : is_integer N2 L : N2 < N H2 : 0 <= N2 Acc : forall M, 0 <= M -> M < N -> acc M * A : acc N2 * ============================ <eval {P}> (pair T1 T2) V
< apply IH to R2 A. Subgoal 5: Variables: N V N2 T2 T1 IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (pair T1 T2) V N @@ R1 : 1 + N2 = N R2 : <eval {ES}> (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) V N2 ** H1 : is_integer N2 L : N2 < N H2 : 0 <= N2 Acc : forall M, 0 <= M -> M < N -> acc M * A : acc N2 * H3 : <eval {P}> (app (app (abs "A" (abs "B" (abs "S" (app (app (var "S") (var "A")) (var "B"))))) T1) T2) V ============================ <eval {P}> (pair T1 T2) V
< search. Subgoal 6: Variables: N V N2 T IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (fst T) V N @@ Acc : acc N @ R1 : 1 + N2 = N R2 : <eval {ES}> (app T (abs "A" (abs "B" (var "A")))) V N2 ** ============================ <eval {P}> (fst T) V
< apply ext_size_is_int_eval to R2. Subgoal 6: Variables: N V N2 T IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (fst T) V N @@ Acc : acc N @ R1 : 1 + N2 = N R2 : <eval {ES}> (app T (abs "A" (abs "B" (var "A")))) V N2 ** H1 : is_integer N2 ============================ <eval {P}> (fst T) V
< L: apply lt_plus_one to R1 _. Subgoal 6: Variables: N V N2 T IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (fst T) V N @@ Acc : acc N @ R1 : 1 + N2 = N R2 : <eval {ES}> (app T (abs "A" (abs "B" (var "A")))) V N2 ** H1 : is_integer N2 L : N2 < N ============================ <eval {P}> (fst T) V
< apply ext_size_pos_eval to R2. Subgoal 6: Variables: N V N2 T IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (fst T) V N @@ Acc : acc N @ R1 : 1 + N2 = N R2 : <eval {ES}> (app T (abs "A" (abs "B" (var "A")))) V N2 ** H1 : is_integer N2 L : N2 < N H2 : 0 <= N2 ============================ <eval {P}> (fst T) V
< Acc: case Acc. Subgoal 6: Variables: N V N2 T IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (fst T) V N @@ R1 : 1 + N2 = N R2 : <eval {ES}> (app T (abs "A" (abs "B" (var "A")))) V N2 ** H1 : is_integer N2 L : N2 < N H2 : 0 <= N2 Acc : forall M, 0 <= M -> M < N -> acc M * ============================ <eval {P}> (fst T) V
< A: apply Acc to _ L. Subgoal 6: Variables: N V N2 T IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (fst T) V N @@ R1 : 1 + N2 = N R2 : <eval {ES}> (app T (abs "A" (abs "B" (var "A")))) V N2 ** H1 : is_integer N2 L : N2 < N H2 : 0 <= N2 Acc : forall M, 0 <= M -> M < N -> acc M * A : acc N2 * ============================ <eval {P}> (fst T) V
< apply IH to R2 A. Subgoal 6: Variables: N V N2 T IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (fst T) V N @@ R1 : 1 + N2 = N R2 : <eval {ES}> (app T (abs "A" (abs "B" (var "A")))) V N2 ** H1 : is_integer N2 L : N2 < N H2 : 0 <= N2 Acc : forall M, 0 <= M -> M < N -> acc M * A : acc N2 * H3 : <eval {P}> (app T (abs "A" (abs "B" (var "A")))) V ============================ <eval {P}> (fst T) V
< search. Subgoal 7: Variables: N V N2 T IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (snd T) V N @@ Acc : acc N @ R1 : 1 + N2 = N R2 : <eval {ES}> (app T (abs "A" (abs "B" (var "B")))) V N2 ** ============================ <eval {P}> (snd T) V
< apply ext_size_is_int_eval to R2. Subgoal 7: Variables: N V N2 T IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (snd T) V N @@ Acc : acc N @ R1 : 1 + N2 = N R2 : <eval {ES}> (app T (abs "A" (abs "B" (var "B")))) V N2 ** H1 : is_integer N2 ============================ <eval {P}> (snd T) V
< L: apply lt_plus_one to R1 _. Subgoal 7: Variables: N V N2 T IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (snd T) V N @@ Acc : acc N @ R1 : 1 + N2 = N R2 : <eval {ES}> (app T (abs "A" (abs "B" (var "B")))) V N2 ** H1 : is_integer N2 L : N2 < N ============================ <eval {P}> (snd T) V
< apply ext_size_pos_eval to R2. Subgoal 7: Variables: N V N2 T IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (snd T) V N @@ Acc : acc N @ R1 : 1 + N2 = N R2 : <eval {ES}> (app T (abs "A" (abs "B" (var "B")))) V N2 ** H1 : is_integer N2 L : N2 < N H2 : 0 <= N2 ============================ <eval {P}> (snd T) V
< Acc: case Acc. Subgoal 7: Variables: N V N2 T IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (snd T) V N @@ R1 : 1 + N2 = N R2 : <eval {ES}> (app T (abs "A" (abs "B" (var "B")))) V N2 ** H1 : is_integer N2 L : N2 < N H2 : 0 <= N2 Acc : forall M, 0 <= M -> M < N -> acc M * ============================ <eval {P}> (snd T) V
< A: apply Acc to _ L. Subgoal 7: Variables: N V N2 T IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (snd T) V N @@ R1 : 1 + N2 = N R2 : <eval {ES}> (app T (abs "A" (abs "B" (var "B")))) V N2 ** H1 : is_integer N2 L : N2 < N H2 : 0 <= N2 Acc : forall M, 0 <= M -> M < N -> acc M * A : acc N2 * ============================ <eval {P}> (snd T) V
< apply IH to R2 A. Subgoal 7: Variables: N V N2 T IH : forall N E V, <eval {ES}> E V N -> acc N * -> <eval {P}> E V IH1 : forall N E V, <eval {ES}> E V N ** -> acc N @ -> <eval {P}> E V R : <eval {ES}> (snd T) V N @@ R1 : 1 + N2 = N R2 : <eval {ES}> (app T (abs "A" (abs "B" (var "B")))) V N2 ** H1 : is_integer N2 L : N2 < N H2 : 0 <= N2 Acc : forall M, 0 <= M -> M < N -> acc M * A : acc N2 * H3 : <eval {P}> (app T (abs "A" (abs "B" (var "B")))) V ============================ <eval {P}> (snd T) V
< search. Proof completed.