Current library: Alpha v34, 4,223 checked-use theorems; Stable remains 432. Historical first admissions, original proof editions, and non-admitted aliases are preserved. Exact original first-admission records.
Exact expanded first-order arithmetic statement
forall b c d e ab ac bb bc ib ic ub uc l. (forall ff_i_fms_bits. (exists ff_lt_fms_bits_bound. ff_lt_fms_bits_bound + S ff_i_fms_bits = (l)) -> exists ff_bit_fms_bits. ((((exists ff_h_fms_bits_decoded. ff_h_fms_bits_decoded + S (ff_bit_fms_bits) = S ((S (ff_i_fms_bits)) * (c))) /\ exists ff_q_fms_bits_decoded. (b) = ff_q_fms_bits_decoded * S ((S (ff_i_fms_bits)) * (c)) + (ff_bit_fms_bits))) /\ (ff_bit_fms_bits = 0 \/ ff_bit_fms_bits = 1))) -> (forall ff_i_fms_bits. (exists ff_lt_fms_bits_bound. ff_lt_fms_bits_bound + S ff_i_fms_bits = (l)) -> exists ff_bit_fms_bits. ((((exists ff_h_fms_bits_decoded. ff_h_fms_bits_decoded + S (ff_bit_fms_bits) = S ((S (ff_i_fms_bits)) * (e))) /\ exists ff_q_fms_bits_decoded. (d) = ff_q_fms_bits_decoded * S ((S (ff_i_fms_bits)) * (e)) + (ff_bit_fms_bits))) /\ (ff_bit_fms_bits = 0 \/ ff_bit_fms_bits = 1))) -> (forall fms_i_complement fms_a_complement fms_v_complement. (exists fms_gap_complement. fms_gap_complement + S (fms_i_complement) = (l)) -> (((exists fs_h_fms_complement_a. fs_h_fms_complement_a + S (fms_a_complement) = S ((S (fms_i_complement)) * c)) /\ exists fs_q_fms_complement_a. b = fs_q_fms_complement_a * S ((S (fms_i_complement)) * c) + (fms_a_complement))) -> (((exists fs_h_fms_complement_b. fs_h_fms_complement_b + S (fms_v_complement) = S ((S (fms_i_complement)) * ac)) /\ exists fs_q_fms_complement_b. ab = fs_q_fms_complement_b * S ((S (fms_i_complement)) * ac) + (fms_v_complement))) -> ((fms_a_complement=0 /\ fms_v_complement=1) \/ (fms_a_complement=1 /\ fms_v_complement=0))) -> (forall fms_i_complement fms_a_complement fms_v_complement. (exists fms_gap_complement. fms_gap_complement + S (fms_i_complement) = (l)) -> (((exists fs_h_fms_complement_a. fs_h_fms_complement_a + S (fms_a_complement) = S ((S (fms_i_complement)) * e)) /\ exists fs_q_fms_complement_a. d = fs_q_fms_complement_a * S ((S (fms_i_complement)) * e) + (fms_a_complement))) -> (((exists fs_h_fms_complement_b. fs_h_fms_complement_b + S (fms_v_complement) = S ((S (fms_i_complement)) * bc)) /\ exists fs_q_fms_complement_b. bb = fs_q_fms_complement_b * S ((S (fms_i_complement)) * bc) + (fms_v_complement))) -> ((fms_a_complement=0 /\ fms_v_complement=1) \/ (fms_a_complement=1 /\ fms_v_complement=0))) -> (forall fms_i_binary. (exists fms_gap_binary. fms_gap_binary + S (fms_i_binary) = (l)) -> ((((((exists fs_h_fms_binary_result. fs_h_fms_binary_result + S (1) = S ((S (fms_i_binary)) * ic)) /\ exists fs_q_fms_binary_result. ib = fs_q_fms_binary_result * S ((S (fms_i_binary)) * ic) + (1))) -> (((((exists fs_h_fms_binary_left. fs_h_fms_binary_left + S (1) = S ((S (fms_i_binary)) * ac)) /\ exists fs_q_fms_binary_left. ab = fs_q_fms_binary_left * S ((S (fms_i_binary)) * ac) + (1))) /\ (((exists fs_h_fms_binary_right. fs_h_fms_binary_right + S (1) = S ((S (fms_i_binary)) * bc)) /\ exists fs_q_fms_binary_right. bb = fs_q_fms_binary_right * S ((S (fms_i_binary)) * bc) + (1)))))) /\ ((((((exists fs_h_fms_binary_left. fs_h_fms_binary_left + S (1) = S ((S (fms_i_binary)) * ac)) /\ exists fs_q_fms_binary_left. ab = fs_q_fms_binary_left * S ((S (fms_i_binary)) * ac) + (1))) /\ (((exists fs_h_fms_binary_right. fs_h_fms_binary_right + S (1) = S ((S (fms_i_binary)) * bc)) /\ exists fs_q_fms_binary_right. bb = fs_q_fms_binary_right * S ((S (fms_i_binary)) * bc) + (1))))) -> (((exists fs_h_fms_binary_result. fs_h_fms_binary_result + S (1) = S ((S (fms_i_binary)) * ic)) /\ exists fs_q_fms_binary_result. ib = fs_q_fms_binary_result * S ((S (fms_i_binary)) * ic) + (1))))))) -> (forall fms_i_complement fms_a_complement fms_v_complement. (exists fms_gap_complement. fms_gap_complement + S (fms_i_complement) = (l)) -> (((exists fs_h_fms_complement_a. fs_h_fms_complement_a + S (fms_a_complement) = S ((S (fms_i_complement)) * ic)) /\ exists fs_q_fms_complement_a. ib = fs_q_fms_complement_a * S ((S (fms_i_complement)) * ic) + (fms_a_complement))) -> (((exists fs_h_fms_complement_b. fs_h_fms_complement_b + S (fms_v_complement) = S ((S (fms_i_complement)) * uc)) /\ exists fs_q_fms_complement_b. ub = fs_q_fms_complement_b * S ((S (fms_i_complement)) * uc) + (fms_v_complement))) -> ((fms_a_complement=0 /\ fms_v_complement=1) \/ (fms_a_complement=1 /\ fms_v_complement=0))) -> (forall fms_i_binary. (exists fms_gap_binary. fms_gap_binary + S (fms_i_binary) = (l)) -> ((((((exists fs_h_fms_binary_result. fs_h_fms_binary_result + S (1) = S ((S (fms_i_binary)) * uc)) /\ exists fs_q_fms_binary_result. ub = fs_q_fms_binary_result * S ((S (fms_i_binary)) * uc) + (1))) -> (((((exists fs_h_fms_binary_left. fs_h_fms_binary_left + S (1) = S ((S (fms_i_binary)) * c)) /\ exists fs_q_fms_binary_left. b = fs_q_fms_binary_left * S ((S (fms_i_binary)) * c) + (1))) \/ (((exists fs_h_fms_binary_right. fs_h_fms_binary_right + S (1) = S ((S (fms_i_binary)) * e)) /\ exists fs_q_fms_binary_right. d = fs_q_fms_binary_right * S ((S (fms_i_binary)) * e) + (1)))))) /\ ((((((exists fs_h_fms_binary_left. fs_h_fms_binary_left + S (1) = S ((S (fms_i_binary)) * c)) /\ exists fs_q_fms_binary_left. b = fs_q_fms_binary_left * S ((S (fms_i_binary)) * c) + (1))) \/ (((exists fs_h_fms_binary_right. fs_h_fms_binary_right + S (1) = S ((S (fms_i_binary)) * e)) /\ exists fs_q_fms_binary_right. d = fs_q_fms_binary_right * S ((S (fms_i_binary)) * e) + (1))))) -> (((exists fs_h_fms_binary_result. fs_h_fms_binary_result + S (1) = S ((S (fms_i_binary)) * uc)) /\ exists fs_q_fms_binary_result. ub = fs_q_fms_binary_result * S ((S (fms_i_binary)) * uc) + (1)))))))Constructive proof overview
Generated structural guide
Actual characteristic complements and intersection construct the exact union by decidable finite De Morgan reasoning.
The unchanged tactic script uses 2 declared prerequisites and contains 110 exact native proof lines.
Alpha v34 checked-use · first admitted v27 · independently kernel and Lean verified; not Stable
Proof neighborhood
Direct dependencies
Direct dependents
Formal native tactic body
Dependencies are introduced as named hypotheses before line 1. Local theorem links identify exact declared prerequisites. This exact body belongs to a complete independently kernel-checked constructive proof bundle and has Alpha checked-use authority; it does not imply Stable membership.
Read the argument
Proof checkpoints
This is a reading aid, not a new proof or a proof-tree certificate. Checkpoint groups are consecutive commands, not inferred branch boundaries. Every step links to the preserved script.
Named ingredients (2)
01Fix variables and assumptionsL1–10
02Fix variables and assumptionsL11–20
03Fix variables and assumptionsL21–21
Work with arbitrary variables or the premises of the current implication.
- L21
intro hi
04Establish hAL22–31
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply finite bit complement member iff.
- L22
have hA : (BetaAt(ab,ac,i,1) → ¬BetaAt(b,c,i,1)) ∧ (¬BetaAt(b,c,i,1) → BetaAt(ab,ac,i,1))Definitions: BetaAt - L23
specialize finite_bit_complement_member_iff b - L24
specialize finite_bit_complement_member_iff c - L25
specialize finite_bit_complement_member_iff ab - L26
specialize finite_bit_complement_member_iff ac - L27
specialize finite_bit_complement_member_iff l - L28
specialize finite_bit_complement_member_iff i - L29
apply finite_bit_complement_member_iff - L30
exact hcompA - L31
exact hi
05Separate the logical casesL32–32
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L32
cases hA
06Establish hBL33–42
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply finite bit complement member iff.
- L33
have hB : (BetaAt(bb,bc,i,1) → ¬BetaAt(d,e,i,1)) ∧ (¬BetaAt(d,e,i,1) → BetaAt(bb,bc,i,1))Definitions: BetaAt - L34
specialize finite_bit_complement_member_iff d - L35
specialize finite_bit_complement_member_iff e - L36
specialize finite_bit_complement_member_iff bb - L37
specialize finite_bit_complement_member_iff bc - L38
specialize finite_bit_complement_member_iff l - L39
specialize finite_bit_complement_member_iff i - L40
apply finite_bit_complement_member_iff - L41
exact hcompB - L42
exact hi
07Separate the logical casesL43–43
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L43
cases hB
08Establish hIL44–53
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply finite bit complement member iff.
- L44
have hI : (BetaAt(ub,uc,i,1) → ¬BetaAt(ib,ic,i,1)) ∧ (¬BetaAt(ib,ic,i,1) → BetaAt(ub,uc,i,1))Definitions: BetaAt - L45
specialize finite_bit_complement_member_iff ib - L46
specialize finite_bit_complement_member_iff ic - L47
specialize finite_bit_complement_member_iff ub - L48
specialize finite_bit_complement_member_iff uc - L49
specialize finite_bit_complement_member_iff l - L50
specialize finite_bit_complement_member_iff i - L51
apply finite_bit_complement_member_iff - L52
exact hcompI - L53
exact hi
09Separate the logical casesL54–54
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L54
cases hI
10Establish hpairL55–58
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply hinter.
11Separate the logical casesL59–60
12Fix variables and assumptionsL61–61
Work with arbitrary variables or the premises of the current implication.
- L61
intro hu
13Establish hnotL62–66
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply hI left.
14Establish hdAL67–74
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply finite bit membership decidable.
- L67
have hdA : (((exists fs_h_fms_union_decA. fs_h_fms_union_decA + S (1) = S ((S (i)) * c)) /\ exists fs_q_fms_union_decA. b = fs_q_fms_union_decA * S ((S (i)) * c) + (1))) \/ ~(((exists fs_h_fms_union_decA. fs_h_fms_union_decA + S (1) = S ((S (i)) * c)) /\ exists fs_q_fms_union_decA. b = fs_q_fms_union_decA * S ((S (i)) * c) + (1))) - L68
specialize finite_bit_membership_decidable b - L69
specialize finite_bit_membership_decidable c - L70
specialize finite_bit_membership_decidable l - L71
specialize finite_bit_membership_decidable i - L72
apply finite_bit_membership_decidable - L73
exact hbitsA - L74
exact hi
15Separate the logical casesL75–76
16Use earlier factsL77–77
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L77
exact hdA_left
17Establish hdBL78–85
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply finite bit membership decidable.
- L78
have hdB : (((exists fs_h_fms_union_decB. fs_h_fms_union_decB + S (1) = S ((S (i)) * e)) /\ exists fs_q_fms_union_decB. d = fs_q_fms_union_decB * S ((S (i)) * e) + (1))) \/ ~(((exists fs_h_fms_union_decB. fs_h_fms_union_decB + S (1) = S ((S (i)) * e)) /\ exists fs_q_fms_union_decB. d = fs_q_fms_union_decB * S ((S (i)) * e) + (1))) - L79
specialize finite_bit_membership_decidable d - L80
specialize finite_bit_membership_decidable e - L81
specialize finite_bit_membership_decidable l - L82
specialize finite_bit_membership_decidable i - L83
apply finite_bit_membership_decidable - L84
exact hbitsB - L85
exact hi
18Separate the logical casesL86–87
19Use earlier factsL88–88
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L88
exact hdB_left
20Separate the logical casesL89–89
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L89
exfalso
21Use earlier factsL90–91
22Separate the logical casesL92–92
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L92
split
23Use earlier factsL93–96
24Fix variables and assumptionsL97–97
Work with arbitrary variables or the premises of the current implication.
- L97
intro hab
25Use earlier factsL98–98
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L98
apply hI_right
26Fix variables and assumptionsL99–99
Work with arbitrary variables or the premises of the current implication.
- L99
intro hione
27Establish hbothL100–102
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply hpair left.
- L100
have hboth : ((((exists fs_h_fms_union_CA. fs_h_fms_union_CA + S (1) = S ((S (i)) * ac)) /\ exists fs_q_fms_union_CA. ab = fs_q_fms_union_CA * S ((S (i)) * ac) + (1))) /\ (((exists fs_h_fms_union_CB. fs_h_fms_union_CB + S (1) = S ((S (i)) * bc)) /\ exists fs_q_fms_union_CB. bb = fs_q_fms_union_CB * S ((S (i)) * bc) + (1)))) - L101
apply hpair_left - L102
exact hione
28Separate the logical casesL103–104
Original exact command ledger · 110 lines
- 0001
intro b - 0002
intro c - 0003
intro d - 0004
intro e - 0005
intro ab - 0006
intro ac - 0007
intro bb - 0008
intro bc - 0009
intro ib - 0010
intro ic - 0011
intro ub - 0012
intro uc - 0013
intro l - 0014
intro hbitsA - 0015
intro hbitsB - 0016
intro hcompA - 0017
intro hcompB - 0018
intro hinter - 0019
intro hcompI - 0020
intro i - 0021
intro hi - 0022
have hA : (((((exists fs_h_fms_hA_target. fs_h_fms_hA_target + S (1) = S ((S (i)) * ac)) /\ exists fs_q_fms_hA_target. ab = fs_q_fms_hA_target * S ((S (i)) * ac) + (1))) -> (~(((exists fs_h_fms_hA_source. fs_h_fms_hA_source + S (1) = S ((S (i)) * c)) /\ exists fs_q_fms_hA_source. b = fs_q_fms_hA_source * S ((S (i)) * c) + (1))))) /\ ((~(((exists fs_h_fms_hA_source. fs_h_fms_hA_source + S (1) = S ((S (i)) * c)) /\ exists fs_q_fms_hA_source. b = fs_q_fms_hA_source * S ((S (i)) * c) + (1)))) -> (((exists fs_h_fms_hA_target. fs_h_fms_hA_target + S (1) = S ((S (i)) * ac)) /\ exists fs_q_fms_hA_target. ab = fs_q_fms_hA_target * S ((S (i)) * ac) + (1))))) - 0023
specialize finite_bit_complement_member_iff b - 0024
specialize finite_bit_complement_member_iff c - 0025
specialize finite_bit_complement_member_iff ab - 0026
specialize finite_bit_complement_member_iff ac - 0027
specialize finite_bit_complement_member_iff l - 0028
specialize finite_bit_complement_member_iff i - 0029
apply finite_bit_complement_member_iff - 0030
exact hcompA - 0031
exact hi - 0032
cases hA - 0033
have hB : (((((exists fs_h_fms_hB_target. fs_h_fms_hB_target + S (1) = S ((S (i)) * bc)) /\ exists fs_q_fms_hB_target. bb = fs_q_fms_hB_target * S ((S (i)) * bc) + (1))) -> (~(((exists fs_h_fms_hB_source. fs_h_fms_hB_source + S (1) = S ((S (i)) * e)) /\ exists fs_q_fms_hB_source. d = fs_q_fms_hB_source * S ((S (i)) * e) + (1))))) /\ ((~(((exists fs_h_fms_hB_source. fs_h_fms_hB_source + S (1) = S ((S (i)) * e)) /\ exists fs_q_fms_hB_source. d = fs_q_fms_hB_source * S ((S (i)) * e) + (1)))) -> (((exists fs_h_fms_hB_target. fs_h_fms_hB_target + S (1) = S ((S (i)) * bc)) /\ exists fs_q_fms_hB_target. bb = fs_q_fms_hB_target * S ((S (i)) * bc) + (1))))) - 0034
specialize finite_bit_complement_member_iff d - 0035
specialize finite_bit_complement_member_iff e - 0036
specialize finite_bit_complement_member_iff bb - 0037
specialize finite_bit_complement_member_iff bc - 0038
specialize finite_bit_complement_member_iff l - 0039
specialize finite_bit_complement_member_iff i - 0040
apply finite_bit_complement_member_iff - 0041
exact hcompB - 0042
exact hi - 0043
cases hB - 0044
have hI : (((((exists fs_h_fms_hI_target. fs_h_fms_hI_target + S (1) = S ((S (i)) * uc)) /\ exists fs_q_fms_hI_target. ub = fs_q_fms_hI_target * S ((S (i)) * uc) + (1))) -> (~(((exists fs_h_fms_hI_source. fs_h_fms_hI_source + S (1) = S ((S (i)) * ic)) /\ exists fs_q_fms_hI_source. ib = fs_q_fms_hI_source * S ((S (i)) * ic) + (1))))) /\ ((~(((exists fs_h_fms_hI_source. fs_h_fms_hI_source + S (1) = S ((S (i)) * ic)) /\ exists fs_q_fms_hI_source. ib = fs_q_fms_hI_source * S ((S (i)) * ic) + (1)))) -> (((exists fs_h_fms_hI_target. fs_h_fms_hI_target + S (1) = S ((S (i)) * uc)) /\ exists fs_q_fms_hI_target. ub = fs_q_fms_hI_target * S ((S (i)) * uc) + (1))))) - 0045
specialize finite_bit_complement_member_iff ib - 0046
specialize finite_bit_complement_member_iff ic - 0047
specialize finite_bit_complement_member_iff ub - 0048
specialize finite_bit_complement_member_iff uc - 0049
specialize finite_bit_complement_member_iff l - 0050
specialize finite_bit_complement_member_iff i - 0051
apply finite_bit_complement_member_iff - 0052
exact hcompI - 0053
exact hi - 0054
cases hI - 0055
have hpair : (((((exists fs_h_fms_union_I. fs_h_fms_union_I + S (1) = S ((S (i)) * ic)) /\ exists fs_q_fms_union_I. ib = fs_q_fms_union_I * S ((S (i)) * ic) + (1))) -> (((((exists fs_h_fms_union_CA. fs_h_fms_union_CA + S (1) = S ((S (i)) * ac)) /\ exists fs_q_fms_union_CA. ab = fs_q_fms_union_CA * S ((S (i)) * ac) + (1))) /\ (((exists fs_h_fms_union_CB. fs_h_fms_union_CB + S (1) = S ((S (i)) * bc)) /\ exists fs_q_fms_union_CB. bb = fs_q_fms_union_CB * S ((S (i)) * bc) + (1)))))) /\ ((((((exists fs_h_fms_union_CA. fs_h_fms_union_CA + S (1) = S ((S (i)) * ac)) /\ exists fs_q_fms_union_CA. ab = fs_q_fms_union_CA * S ((S (i)) * ac) + (1))) /\ (((exists fs_h_fms_union_CB. fs_h_fms_union_CB + S (1) = S ((S (i)) * bc)) /\ exists fs_q_fms_union_CB. bb = fs_q_fms_union_CB * S ((S (i)) * bc) + (1))))) -> (((exists fs_h_fms_union_I. fs_h_fms_union_I + S (1) = S ((S (i)) * ic)) /\ exists fs_q_fms_union_I. ib = fs_q_fms_union_I * S ((S (i)) * ic) + (1))))) - 0056
specialize hinter i - 0057
apply hinter - 0058
exact hi - 0059
cases hpair - 0060
split - 0061
intro hu - 0062
have hnot : ~(((exists fs_h_fms_union_notI. fs_h_fms_union_notI + S (1) = S ((S (i)) * ic)) /\ exists fs_q_fms_union_notI. ib = fs_q_fms_union_notI * S ((S (i)) * ic) + (1))) - 0063
intro hx - 0064
apply hI_left - 0065
exact hu - 0066
exact hx - 0067
have hdA : (((exists fs_h_fms_union_decA. fs_h_fms_union_decA + S (1) = S ((S (i)) * c)) /\ exists fs_q_fms_union_decA. b = fs_q_fms_union_decA * S ((S (i)) * c) + (1))) \/ ~(((exists fs_h_fms_union_decA. fs_h_fms_union_decA + S (1) = S ((S (i)) * c)) /\ exists fs_q_fms_union_decA. b = fs_q_fms_union_decA * S ((S (i)) * c) + (1))) - 0068
specialize finite_bit_membership_decidable b - 0069
specialize finite_bit_membership_decidable c - 0070
specialize finite_bit_membership_decidable l - 0071
specialize finite_bit_membership_decidable i - 0072
apply finite_bit_membership_decidable - 0073
exact hbitsA - 0074
exact hi - 0075
cases hdA - 0076
left - 0077
exact hdA_left - 0078
have hdB : (((exists fs_h_fms_union_decB. fs_h_fms_union_decB + S (1) = S ((S (i)) * e)) /\ exists fs_q_fms_union_decB. d = fs_q_fms_union_decB * S ((S (i)) * e) + (1))) \/ ~(((exists fs_h_fms_union_decB. fs_h_fms_union_decB + S (1) = S ((S (i)) * e)) /\ exists fs_q_fms_union_decB. d = fs_q_fms_union_decB * S ((S (i)) * e) + (1))) - 0079
specialize finite_bit_membership_decidable d - 0080
specialize finite_bit_membership_decidable e - 0081
specialize finite_bit_membership_decidable l - 0082
specialize finite_bit_membership_decidable i - 0083
apply finite_bit_membership_decidable - 0084
exact hbitsB - 0085
exact hi - 0086
cases hdB - 0087
right - 0088
exact hdB_left - 0089
exfalso - 0090
apply hnot - 0091
apply hpair_right - 0092
split - 0093
apply hA_right - 0094
exact hdA_right - 0095
apply hB_right - 0096
exact hdB_right - 0097
intro hab - 0098
apply hI_right - 0099
intro hione - 0100
have hboth : ((((exists fs_h_fms_union_CA. fs_h_fms_union_CA + S (1) = S ((S (i)) * ac)) /\ exists fs_q_fms_union_CA. ab = fs_q_fms_union_CA * S ((S (i)) * ac) + (1))) /\ (((exists fs_h_fms_union_CB. fs_h_fms_union_CB + S (1) = S ((S (i)) * bc)) /\ exists fs_q_fms_union_CB. bb = fs_q_fms_union_CB * S ((S (i)) * bc) + (1)))) - 0101
apply hpair_left - 0102
exact hione - 0103
cases hboth - 0104
cases hab - 0105
apply hA_left - 0106
exact hboth_left - 0107
exact hab_left - 0108
apply hB_left - 0109
exact hboth_right - 0110
exact hab_right