ニート歴10年からの数学日記

2008年〜2009年の高一の冬休みから無職。最長で4ヶ月ほどの中断アリ。

ユークリッド幾何学以外における記述法と三角形定理ループの統合

元の記述法と統合することになったんで、まずは三角形定理ループだとかを元の記述法に置き換えてみた。
 

triangle_lst = [
    "△ABC" : ["HAI", "AB", "CBI", "BC", "BCH", "AC"],
    "△ACD" : ["DAH", "AC", "DCH", "CD", "ADC", "AD"],
    "△ADH" : ["DAH", "AD", "ADG", "DH", "AHG", "AH"],
    "△ADI" : ["DAI", "AD", "ADG", "DI", "AIH", "AI"],
    "△AHI" : ["HAI", "AH", "AHI", "HI", "AIH", "AI"],
    "△BEI" : ["EBI", "BE", "BEI", "EI", "BIE", "BI"],
    "△CDE" : ["BCD", "CD", "CDG", "DE", "BEI", "CE"],
    "△CDG" : ["DCG", "CD", "CDG", "DG", "CGD", "CG"],
    "△CDH" : ["DCH", "CD", "CDG", "DH", "CHG", "CH"],
    "△CEF" : ["BCF", "CE", "BEF", "EF", "CFE", "CF"],
    "△CEG" : ["BCG", "CE", "BEI", "EG", "CGH", "CG"],
    "△CEH" : ["BCH", "CE", "BEI", "EH", "CHI", "CH"],
    "△CGH" : ["GCH", "CG", "CGH", "GH", "CHG", "CH"],
];

"AD" == "BC" == "EG" == "CF";
"AB" == "CD" == "EF" == "CG";

"DAI" == "BCD" == "FEI" == "EBI" == "CGD";
"ADC" == "CBI" == "CFE" == "CGH";
"AHG" == "CHI";
"AHI" == "CHG" == "FCH";
"AIH" == "BIE" == "CGG";
"AIE" == "BIH";
"DAH" == "BCH";
"ADG" == "BEI" == "BCF";
"HAI" == "DCH";
"BEF" == "BCG";

"DAH" + "HAI" == "DAI";
"EBI" + "CBI" == 180;
"DCG" + "GCH" == "DCH";
"GCH" + "BCH" == "BCG";
"BCH" + "BCF" == "FCH";
"DCH" + "BCH" == "BCD";
"BCG" + "DCG" == "BCD";
"BCG" + "BCF" == "FCG";
"FCH" + "GCH" == "FCG";
"BCD" + "BCF" == "DCF";
"FCG" + "DCG" == "DCF";
"ADG" + "CDG" == "ADC";
"BEI" + "BEF" == "FEI";
"CGD" + "CGH" == 180;
"AHG" + "CHG" == 180;
"AIH" + "AIE" == 180;
"HAI" + "BCH" == "EBI";
"BCG" + "BEI" == "CGD";
"DAH" + "ADG" == "AHI";
"DAI" + "ADG" == "AIE";
"DCG" + "CDG" == "CGH";
"EBI" + "BEI" == "BIH";
"BEI" + "BIE" == "CBI";
"HAI" + "AHI" == "BIH";
"HAI" + "AIH" == "AHG";
"DCH" + "CDG" == "AHG";
"GCH" + "CGH" == "CHI";
"GCH" + "CHG" == "CGD";

"AI" + "BI" == "AB";
"AH" + "CH" == "AC";
"BC" + "BE" == "CE";
"DG" + "EG" == "DE";
"DH" + "EH" == "DE";
"DI" + "EI" == "DE";
"DG" + "GH" == "DH";
"DG" + "GI" == "DI";
"DH" + "HI" == "DI";
"EI" + "GI" == "EG";
"EH" + "GH" == "EG";
"EI" + "HI" == "EH";
"GH" + "HI" == "GI";


def ele1_equal_ele2(ele1, ele2, loop_flg, exe_flg) {
    if not (ele1 == ele2) {
        ele1 == ele2;

        loop_flg := True;
        exe_flg := True;
    }

    return loop_flg, exe_flg;
}


def isosceles_angle_check(triangle_lst, exe_flg) {
    loop_flg := True;

    while loop_flg {
        loop_flg := False;

        for tri1 in triangle_lst.values() {
            for angle1, angle2, side1, side2 in [(tri1[0], tri1[2], tri1[5], tri1[3]), (tri1[2], tri1[4], tri1[1], tri1[5]), (tri1[0], tri1[4], tri1[1], tri1[3])] {
                if angle_1 == angle_2 {
                    loop_flg, exe_flg := ele1_equal_ele2(side1, side2, loop_flg, exe_flg);
                }
            }
        }
    }

    return triangle_lst, exe_flg;
}


def isosceles_side_check(triangle_lst, exe_flg) {
    loop_flg := True;

    while loop_flg {
        loop_flg := False;

        for tri1 in triangle_lst.values() {
            for side1, side2, angle1, angle2 in [(tri1[1], tri1[3], tri1[0], tri1[4]), (tri1[3], tri1[5], tri1[2], tri1[0]), (tri1[1], tri1[5], tri1[2], tri1[4])] {
                if side1 == side2 {
                    loop_flg, exe_flg := ele1_equal_ele2(angle1, angle2, loop_flg, exe_flg);
                }
            }
        }
    }

    return triangle_lst, exe_flg;
}


def two_angle_check(triangle_lst, exe_flg) {
    loop_flg := True;

    while loop_flg {
        loop_flg := False;

        for tri1 in triangle_lst.values() {
            for tri2 in triangle_lst.values() {
                if tri1 == tri2 {
                    continue;
                }

                for angle_1_A, angle_1_B in itertools.combinations([tri1[0], tri1[2], tri1[4]], 2) {
                    for angle_2_A, angle_2_B in itertools.combinations([tri2[0], tri2[2], tri2[4]], 2) {
                        if (angle_1_A, angle_1_B) == (angle_2_A, angle_2_B) {
                            angle_1_C := [A for A in [tri1[0], tri1[2], tri1[4]] if A not in [angle_1_A, angle_1_B]][0];
                            angle_2_C := [A for A in [tri2[0], tri2[2], tri2[4]] if A not in [angle_2_A, angle_2_B]][0];

                            loop_flg, exe_flg := ele1_equal_ele2(angle_1_C, angle_2_C, loop_flg, exe_flg);
                        }
                    }
                }
            }
        }
    }
    
    return triangle_lst, exe_flg;
}


def angle_side_angle(triangle_lst, exe_flg) {
    loop_flg := True;

    while loop_flg {
        loop_flg := False;

        for tri1 in triangle_lst.values() {
            for tri2 in triangle_lst.values() {
                if tri1 == tri2 {
                    continue;
                }

                for angle_1_A, side_1, angle_1_B, side_1_X, angle_1_C, side_1_Y in [(tri1[0], tri1[1], tri1[2], tri1[3], tri1[4], tri1[5]), \
                                                                                    (tri1[2], tri1[3], tri1[4], tri1[5], tri1[0], tri1[1]), \
                                                                                    (tri1[4], tri1[5], tri1[0], tri1[1], tri1[2], tri1[3])] {
                    for angle_2_A, side_2, angle_2_B, side_2_X, angle_2_C, side_2_Y in [(tri2[0], tri2[1], tri2[2], tri2[3], tri2[4], tri2[5]), \
                                                                                        (tri2[2], tri2[3], tri2[4], tri2[5], tri2[0], tri2[1]), \
                                                                                        (tri2[4], tri2[5], tri2[0], tri2[1], tri2[2], tri2[3])] {
                        if side_1 == side_2 && (angle_1_A, angle_1_B) == (angle_2_A, angle_2_B) {
                            loop_flg, exe_flg := ele1_equal_ele2(angle_1_C, angle_2_C, loop_flg, exe_flg);
                            
                            if angle_1_A == angle_2_A {
                                loop_flg, exe_flg := ele1_equal_ele2(side_1_X, side_2_X, loop_flg, exe_flg);
                                loop_flg, exe_flg := ele1_equal_ele2(side_1_Y, side_2_Y, loop_flg, exe_flg);
                            } else {
                                loop_flg, exe_flg := ele1_equal_ele2(side_1_X, side_2_Y, loop_flg, exe_flg);
                                loop_flg, exe_flg := ele1_equal_ele2(side_1_Y, side_2_X, loop_flg, exe_flg);
                            }
                        }
                    }
                }
            }
        }
    }

    return triangle_lst, exe_flg;
}


def side_angle_side(triangle_lst, exe_flg) {
    loop_flg := True;

    while loop_flg {
        loop_flg := False;

        for tri1 in triangle_lst.values() {
            for tri2 in triangle_lst.values() {
                if tri1 == tri2 {
                    continue;
                }

                for side_1_A, angle_1, side_1_B, angle_1_X, side_1_C, angle_1_Y in [(tri1[1], tri1[2], tri1[3], tri1[4], tri1[5], tri1[0]), \
                                                                                    (tri1[3], tri1[4], tri1[5], tri1[0], tri1[1], tri1[2]), \
                                                                                    (tri1[5], tri1[0], tri1[1], tri1[2], tri1[3], tri1[4])] {
                    for side_2_A, angle_2, side_2_B, angle_2_X, side_2_C, angle_2_Y in [(tri2[1], tri2[2], tri2[3], tri2[4], tri2[5], tri2[0]), \
                                                                                        (tri2[3], tri2[4], tri2[5], tri2[0], tri2[1], tri2[2]), \
                                                                                        (tri2[5], tri2[0], tri2[1], tri2[2], tri2[3], tri2[4])] {
                        if angle_1 == angle_2 and (side_1_A, side_1_B) == (side_2_A, side_2_B) {
                            loop_flg, exe_flg := ele1_equal_ele2(side_1_C, side_2_C, loop_flg, exe_flg);

                            if side_1_A == side_2_A {
                                loop_flg, exe_flg := ele1_equal_ele2(angle_1_X, angle_2_X, loop_flg, exe_flg);
                                loop_flg, exe_flg := ele1_equal_ele2(angle_1_Y, angle_2_Y, loop_flg, exe_flg);
                            } else {
                                loop_flg, exe_flg := ele1_equal_ele2(angle_1_X, angle_2_Y, loop_flg, exe_flg);
                                loop_flg, exe_flg := ele1_equal_ele2(angle_1_Y, angle_2_X, loop_flg, exe_flg);
                            }
                        }
                    }
                }
            }
        }
    }
    
    return triangle_lst, exe_flg;
}


def side_side_side(triangle_lst, exe_flg) {
    loop_flg := True;

    while loop_flg {
        loop_flg := False;

        for tri1 in triangle_lst.values() {
            for tri2 in triangle_lst.values() {
                if tri1 == tri2 {
                    continue;
                }

                angle_1_A, side_1_A, angle_1_B, side_1_B, angle_1_C, side_1_C := tri1;
                angle_2_A, side_2_A, angle_2_B, side_2_B, angle_2_C, side_2_C := tri2;

                if (side_1_A, side_1_B, side_1_C) == (side_2_A, side_2_B, side_2_C) {
                    if side_1_A == side_2_A {
                        if side_1_B == side_2_B {
                            loop_flg, exe_flg := ele1_equal_ele2(angle_1_A, angle_2_A, loop_flg, exe_flg);
                            loop_flg, exe_flg := ele1_equal_ele2(angle_1_B, angle_2_B, loop_flg, exe_flg);
                            loop_flg, exe_flg := ele1_equal_ele2(angle_1_C, angle_2_C, loop_flg, exe_flg);
                        } elif side_1_B == side_2_C {
                            loop_flg, exe_flg := ele1_equal_ele2(angle_1_A, angle_2_B, loop_flg, exe_flg);
                            loop_flg, exe_flg := ele1_equal_ele2(angle_1_B, angle_2_A, loop_flg, exe_flg);
                            loop_flg, exe_flg := ele1_equal_ele2(angle_1_C, angle_2_C, loop_flg, exe_flg);
                        }
                    } elif side_1_A == side_2_B {
                        if side_1_B == side_2_A {
                            loop_flg, exe_flg := ele1_equal_ele2(angle_1_A, angle_2_C, loop_flg, exe_flg);
                            loop_flg, exe_flg := ele1_equal_ele2(angle_1_B, angle_2_B, loop_flg, exe_flg);
                            loop_flg, exe_flg := ele1_equal_ele2(angle_1_C, angle_2_A, loop_flg, exe_flg);
                        } elif side_1_B == side_2_C {
                            loop_flg, exe_flg := ele1_equal_ele2(angle_1_A, angle_2_B, loop_flg, exe_flg);
                            loop_flg, exe_flg := ele1_equal_ele2(angle_1_B, angle_2_C, loop_flg, exe_flg);
                            loop_flg, exe_flg := ele1_equal_ele2(angle_1_C, angle_2_A, loop_flg, exe_flg);
                        }
                    } elif side_1_A == side_2_C {
                        if side_1_B == side_2_A {
                            loop_flg, exe_flg := ele1_equal_ele2(angle_1_A, angle_2_C, loop_flg, exe_flg);
                            loop_flg, exe_flg := ele1_equal_ele2(angle_1_B, angle_2_A, loop_flg, exe_flg);
                            loop_flg, exe_flg := ele1_equal_ele2(angle_1_C, angle_2_B, loop_flg, exe_flg);
                        } elif side_1_B == side_2_B {
                            loop_flg, exe_flg := ele1_equal_ele2(angle_1_A, angle_2_A, loop_flg, exe_flg);
                            loop_flg, exe_flg := ele1_equal_ele2(angle_1_B, angle_2_C, loop_flg, exe_flg);
                            loop_flg, exe_flg := ele1_equal_ele2(angle_1_C, angle_2_B, loop_flg, exe_flg);
                        }
                    }
                }
            }
        }
    }

    return triangle_lst, exe_flg;
}


def triangle_theorem_loop(triangle_lst) {
    exe_flg := True;

    while exe_flg:
        exe_flg := False;

        triangle_lst, exe_flg := isosceles_angle_check(triangle_lst, exe_flg);

        triangle_lst, exe_flg := isosceles_side_check(triangle_lst, exe_flg);

        triangle_lst, exe_flg := two_angle_check(triangle_lst, exe_flg);

        triangle_lst, exe_flg := angle_side_angle(triangle_lst, exe_flg);

        triangle_lst, exe_flg := side_angle_side(triangle_lst, exe_flg);

        triangle_lst, exe_flg := side_side_side(triangle_lst, exe_flg);

    return triangle_lst;
}


triangle_lst := triangle_theorem_loop(triangle_lst);